我刚开始学习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?也许有人可以告诉我我做错了什么并解释原因?
感谢您花时间阅读它:)
答案 0 :(得分:4)
问题在于:
scanf("%s", &table[i]);
和此:
printf("Person nr %d : %s ", i+1, &table[i]);
您似乎忘记table[i]
是指向char
的指针,这是字符串基本上是什么。通过使用&table[i]
,您可以获得指向的指针,其类型为char **
。您基本上将指针本身视为字符串,而不是它指向的内存。
只需删除address-of运算符,即可读取最多五个字符的字符串(加上终结符)。
答案 1 :(得分:0)
&table[i]
的类型为char**
,table[i]
的类型为char*
。
table[i]
是字符串的指针。
您应该将&table[i]
更改为table[i]
。