arrays - C中指向字符串的动态二维数组
问题描述
我想创建一个指向字符串的动态二维数组,如下图所示:
下面的程序是程序的一个提取部分,动态分配堆栈 A 似乎工作正常,但我无法创建指向 A 单元格的指针的动态二维数组。
// Global
char **stack_A; // dynamic array of strings
char ***stack_B; // dynamic array of pointers to strings
int main(){
stack_A = malloc(sizeof(char *));
stack_B = malloc(sizeof(char **));
function();
return 0;
}
void function(){
// example for first entry
char *text = "some text";
stack_A = realloc(stack_A, sizeof(char *)*strlen(text));
stack_A[0] = strdup(text);
stack_B[0] = realloc(stack_B[0], sizeof(char **));
stack_B[0][0] = *stack_A[0];
printf("%s", **stack_B[0][0]); // I want to output "some text"
}
更新:评论和答案都有助于解决问题。
解决方案
问题是您没有复制指向字符串的指针,而是复制字符串的第一个字符:
stack_B[0][0] = *stack_A[0];
->*stack_A
表示数组组中的第一个数组。它的含义与 相同stack_A[0]
。
*stack_A[0]
表示 中的第一个字符stack_A[0]
:'s'
您需要复制指针,而不是第一个字母:
stack_B[0][0] = *stack_A[0]
变为stack_B[0][0] = stack_A[0]
.