繁体   English   中英

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

[英]Array Elements Overwritten with Last in 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=malloc(sizeof(char*)*nStrings);

for(i=0;i<nStrings;i++)
{
    scanf("%s",string);
    sptr[i]=strdup(string);
}

我假设变量字符串具有足够的内存来保留读取的字符串。

发生错误是因为您将指针设置为指向字符串变量。

您需要为空终止符额外分配1个字符:

sptr[i]=malloc(sizeof(char)*(length+1));

另外,您需要将字符串复制到新分配的内存中:

strcpy(sptr[i], string);

您的代码中有两个问题:您没有分配足够的内存。 由于字符串的结尾\\ 0,因此应为长度+ 1。 其次,您应该使用strcpy将字符串复制到分配的内存中。 查找同时处理两者的strdup函数。

strlen不能说明零终止,您需要添加一个。 但是主要是您需要将字符串复制到分配的内存中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM