C 二维动态分配
我想分配一个动态字符数组。所以我有上面的代码C 二维动态分配,c,function,2d,malloc,allocation,C,Function,2d,Malloc,Allocation,我想分配一个动态字符数组。所以我有上面的代码 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;
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]);
}
}
}
void初始化(字符**文档\表格,整数大小){
int x,i,j,M;
printf(“每行有多少字:”);scanf(“%d”,&M);
document_table=malloc(sizeof(char)*大小);
对于(x=0;x 对于(i=0;i声明document\u table=malloc(sizeof(char)*size);
应该有sizeof(char*)
,因为2D数组是指向1D数组的指针数组。声明document\u table=malloc(sizeof(char)*size);
应该有sizeof(char
,因为2D数组是指向1D数组的指针数组。您应该在数组中分配指针:
document_table = malloc(sizeof(char*) * size);
注意sizeof()操作符中的char*
您应该在数组中分配指针:
document_table = malloc(sizeof(char*) * size);
请注意sizeof()运算符中的char*
问题1:char**document\u表本身是按值传递的。这意味着调用代码,例如:
char** document_table = 0;
initialize(document_table,2);
/* document_table still 0 here */
不会初始化传递的参数。可能希望将文档\u表
作为返回值,或传入其地址
问题2:N
应该是大小
问题3:scanf(“%c”)
与M
是“单词”的定义不一致。%c
表示单个字符。此外,文本每行
都意味着面向行的输入,但这也不是扫描所要查找的。如果文档存储了“单词”,则:
- 文档是行的数组
- 一行是一组单词
- 单词是一个字符数组
因此,文档实际上是一个3D字符数组。问题1:char**document\u table
本身是按值传递的。这意味着调用如下代码:
char** document_table = 0;
initialize(document_table,2);
/* document_table still 0 here */
不会初始化传递的参数。可能希望将文档\u表
作为返回值,或传入其地址
问题2:N
应该是大小
问题3:scanf(“%c”)
与M
是“单词”的定义不一致。%c
表示单个字符。此外,文本每行
都意味着面向行的输入,但这也不是扫描所要查找的。如果文档存储了“单词”,则:
- 文档是行的数组
- 一行是一组单词
- 单词是一个字符数组
因此,文档实际上是一个3D字符数组。您的嵌套循环使用相同的索引变量i
,并始终将第一个元素的地址传递给scanf
。此外,N
没有定义或初始化。我想您的意思可能是M
。但如果是这种情况,您不需要size
要作为函数参数传入,您希望它根据用户输入的内容进行计算吗?xm和j输入错误。但这不是问题所在,我得到了N的大小。但在SCAN第一个程序停止后,它不起作用。嵌套循环使用相同的索引变量i
,并传递到scanf
始终是第一个元素的地址。此外,N
没有定义或初始化。我想你的意思可能是M
。但如果是这样,你不希望size
作为函数参数传入,你希望它根据用户输入的内容进行计算?xm和j是错误的键入。但这是错误的不是问题,在N的位置我得到了大小。但是在第一个程序停止后它就不工作了。