c中的字符矩阵(动态分配的2D数组)

  • 本文关键字:动态分配 2D 数组 字符 c
  • 更新时间 :
  • 英文 :


这段代码有什么问题? 我正在尝试将 stdin 中的 n 行放入chars **a矩阵中。**a需要动态分配。

代码如下:

int main()
{
char **a=NULL;
int n;
int i=1;
int j=0;
char c;
scanf("%d",&n);
getchar();
a=malloc(n*sizeof(char*));
while(n>0)
{
while(1)
{
c=getchar();
if(c=='n')
{
j++;
break;
}
i++;
a[j]=realloc(a,i*sizeof(char));
a[j][i-2]=c;
a[j][i-1]='';
}
i=1;
n--;
}

printf("%sn",a[0]); 
free(a); 
}

替换

a[j]=realloc(a,i*sizeof(char)); 

a[j]=realloc(a[j],i*sizeof(char));

为了只重新分配其中一个子数组而不是整个数组。
我建议也做另一个答案中建议的改进,初始化子数组,这也将第一个 realloc 变成一个分配。

您没有初始化数组 a.
添加a[j] = NULL

如下所示
int main()
{
char **a=NULL;
int n;
int i=1;
int j=0;
char c;
scanf("%d",&n);
getchar();
a=malloc(n*sizeof(char*));
while(n>0)
{
a[j] = NULL;
while(1)
{
c=getchar();
if(c=='n')
{
j++;
break;
}
i++;
a[j]=realloc(a[j],i*sizeof(char));
a[j][i-2]=c;
a[j][i-1]='';
}
i=1;
n--;
}

printf("%sn",a[0]); 
free(a); 
}

最新更新