我试图创建一个程序,它接收一组字符串(用户被要求输入它们将输入的字符串的数量),一旦它有这些字符串,它们被放置在一个数组中,使用动态内存。用C中最后一个覆盖的数组元素
的输出中会是这样的:
# 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的指示都是=我放入的最后一个字符串,并且我不知道为什么。
如果你能帮助我,我会很感激。谢谢。
正如答案所暗示的,'sptr [i] = string;'分配指针,而不是它指向的内存。如果您重复使用相同的内存来读取字符串,那么数组中的每个元素都将指向内存中的相同位置,因此它们将打印相同的字符串。更喜欢strcpy的srtncpy,不太容易将一个字符串复制到一个较小的缓冲区并获得一个内存溢出。希望这可以帮助。 – 2010-01-24 18:11:02
谢谢,这完美澄清了事情。如果仅仅因为它是我们在课堂上使用的,我会使用strcpy。我正在考虑完全回答的问题。男人,我喜欢这个社区。 – Blackbinary 2010-01-24 18:40:57