我正在尝试创建一个程序,它接受一组字符串(要求用户输入他们要输入的字符串数),一旦它有了这些字符串,它们就被放置在一个数组中,使用动态内存。
输出应该是这样的:
# of Strings: 3
Cat
Dog
Elephant
Cat
Dog
Elephant
这是我的代码片段,在我有了字符串数之后。
sptr=malloc(sizeof(char*)*nStrings);
for(i=0;i<nStrings;i++)
{
scanf("%s",string);
length=strlen(string);
sptr[i]=malloc(sizeof(char)*length);
sptr[i]=string;
}
其中sptr是我将访问以输出字符串的数组。
所以它是一个指针数组,然后指向单个字符串(或者其他字符数组,如果你愿意这样想的话)。
假设有两个字符串。
我为两个指针分配内存,
然后在第一个指针中,我扫描一个字符串,
我找到绳子的长度,
我分配字符串大小的内存
我等于指向字符串的指针。
这一切都很好,如果我把printf()放在最后一行之后,它就可以工作了。
我面临的问题是,如果假设有3个字符串,那么每次通过sptr[i]的字符串都被正确分配,但是在该块之外,sptr的所有指针都是=我输入的最后一个字符串,我不知道为什么。
如果你能帮我,我会很感激的。谢谢。
最佳答案
您需要为空终止符额外分配1个字符:
sptr[i]=malloc(sizeof(char)*(length+1));
此外,还需要将字符串复制到新分配的内存中:
strcpy(sptr[i], string);