我想动态分配一个字符数组。所以我有上面的代码
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]);
}
}
}
但是似乎在分配了存储器之后,该功能停止工作。
声明document_table = malloc(sizeof(char) * size);
应该有sizeof(char*)
,因为2D数组是指向1D数组的指针数组。
Issue 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
意味着面向行的输入,但这不是扫描所要寻找的。如果文档存储"单词",则:
- 文档是一组行
- 一行是一组单词
- 单词是一组字符
因此,文档实际上是一个由字符组成的三维数组。
您应该在数组中分配指针:
document_table = malloc(sizeof(char*) * size);
注意sizeof()运算符中的char*