[英]Matrix of chars (dynamically allocated 2D array) in 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]='\0';
}
i=1;
n--;
}
printf("%s\n",a[0]);
free(a);
}
您沒有初始化數組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]='\0';
}
i=1;
n--;
}
printf("%s\n",a[0]);
free(a);
}
更換
a[j]=realloc(a,i*sizeof(char));
與
a[j]=realloc(a[j],i*sizeof(char));
為了只重新分配一個子數組而不是整個數組。
我建議也做另一個答案中建議的改進,以初始化子數組,這也將第一個重新分配變成一個分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.