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的位置我得到了大小。但是在第一个程序停止后它就不工作了。