c - C 中用 Last 覆盖的数组元素

标签 c arrays memory dynamic malloc

我正在尝试创建一个接受一定数量字符串的程序(要求用户输入他们将输入的字符串数量),一旦有了这些字符串,它们就会被放置在一个数组中,使用动态内存。

输出应该是这样的:

# 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/

相关文章:

c - 在 C 中使用 fscanf 读取多个字符串

php - 获取多维数组校验和的最简洁方法是什么?

ios - 使数组中的无序项目始终保持相同顺序

c - 使用用户输入的十六进制值读取 c 中的内存地址

C 填充缓冲区

c++ - 如何使用 cmake 在 'make install' 期间复制/移动一组特定文件?

我们可以将 MACRO 名称定义为特定字符串吗?

arrays - 如何获取值并将它们放入数组angularjs中

javascript - 就内存使用而言,javascript中这两个数组有什么区别?

javascript - 获取 HTML 文档的当前内存使用情况?