我想分配动态的字符数组。所以我有上面的代码
void initialize(char **document_table, int size){
int x, i, j, M;
printf("how many words every line: "); scanf("%d", &M);
document_table = malloc(sizeof(char) * size);
for(x = 0; x < size; x ++) {
document_table[x] = malloc(sizeof(char) * M);
}
for(i=0; i<N; i++){
for(j=0; j<N; j++){
scanf("%c",&document_table[i][j]);
}
}
}
但似乎在分配内存后该功能停止工作。
答案 0 :(得分:2)
声明document_table = malloc(sizeof(char) * size);
应该有sizeof(char*)
,因为2D数组是指向1D数组的指针数组。
答案 1 :(得分:1)
问题1:char** document_table
本身是按值传递的。这意味着调用代码如:
char** document_table = 0;
initialize(document_table,2);
/* document_table still 0 here */
不会初始化传递的参数。可能想要使document_table
返回值,或传递其地址。
问题2:N
应为size
?
问题3:scanf("%c")
与M
作为“单词”的定义不一致。 %c
代表单个字符。此外,文本every line
意味着面向行的输入,但这也不是扫描所寻找的。如果文档存储“单词”,则:
因此,文档实际上是一个3D数组字符。
答案 2 :(得分:0)
您应该在数组中分配指针:
document_table = malloc(sizeof(char*) * size);
注意sizeof()运算符
中的char*