【发布时间】:2010-01-24 17:55:10
【问题描述】:
我正在尝试创建一个程序,该程序接受一组字符串(要求用户输入他们将输入的字符串数),一旦有了这些字符串,它们就会被放置在一个数组中,使用动态内存。
输出会是这样的:
# of Strings: 3
Cat
Dog
Elephant
Cat
Dog
Elephant
这是我的代码的 sn-p,在我得到字符串数量之后。
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 的索引都是 = 到我输入的最后一个字符串,我不知道为什么。
如果您能帮助我,我将不胜感激。谢谢。
【问题讨论】:
-
答案暗示,'sptr[i]=string;'分配指针,而不是它指向的内存。如果您重用相同的内存来读取字符串,那么数组的每个元素将指向内存中的相同位置,因此它们将打印相同的字符串。更喜欢 srtncpy 而不是 strcpy,不太容易将字符串复制到较小的缓冲区并导致内存溢出。希望这会有所帮助。
-
谢谢,这完美地澄清了事情。我将使用 strcpy 只是因为它是我们在课堂上使用的。我正在考虑完全回答这个问题。伙计,我喜欢这个社区。span>
标签: c arrays memory dynamic malloc