我刚开始学C,所以如果可以的话,请不要对我太苛刻。 我正在尝试学习如何为数组分配内存,所以我从这样的事情开始。我只想为字符串数组动态分配内存,然后显示它。
int main( )
{
int number, i;
scanf ("%d", &number);
char **table =(char **) malloc(number*sizeof(char*));
for(i=0; i<number; i++)
{
table[i] = (char *)malloc(6);
}
for(i=0; i<number; i++)
{
scanf("%s", &table[i]);
}
for(i=0; i<number; i++)
{
printf("Person nr %d : %s ", i+1, &table[i]);
}
for(i=0; i<number; i++)
{
free(table[i]);
}
free(table);
return 0;
}
但程序仅在我键入 3 个或更少字母的单词时才有效。所以,我不知道我是否有内存分配问题,或者我只是无法使用 %s 打印 **char?也许有人可以告诉我哪里做错了并解释原因?
感谢您花时间阅读它:)
最佳答案
问题是这样的:
scanf("%s", &table[i]);
还有这个:
printf("Person nr %d : %s ", i+1, &table[i]);
您似乎忘记了 table[i]
是指向 char
的指针,这基本上就是一个字符串。通过使用 &table[i]
,您可以得到一个 指向该指针 的指针,它的类型是 char **
。您基本上将指针本身视为一个字符串,而不是它指向的内存。
只需删除地址运算符,您就可以读取最多五个字符(加上终止符)的字符串。
关于c - 对字符串数组使用动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44943910/