我正在尝试创建一个接受一定数量字符串的程序(要求用户输入他们将输入的字符串数量),一旦有了这些字符串,它们就会被放置在一个数组中,使用动态内存。
输出应该是这样的:
# 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] 都被正确分配,但是在那个 block 之外,sptr 的所有指标都是 = 我输入的最后一个字符串,我不知道为什么。
如果你能帮助我,我将不胜感激。谢谢。
最佳答案
sptr=malloc(sizeof(char*)*nStrings);
for(i=0;i<nStrings;i++)
{
scanf("%s",string);
sptr[i]=strdup(string);
}
我假设变量字符串有足够的内存来保存读取的字符串。
错误发生是因为您将指针设置为指向字符串变量。
关于c - C 中用 Last 覆盖的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2128069/