这段代码有什么问题? 我正在尝试将 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);
}