首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C中重复元素的字符串数组的问题

C中重复元素的字符串数组的问题
EN

Stack Overflow用户
提问于 2019-06-04 03:03:30
回答 2查看 43关注 0票数 -2

我尝试接收未知数量的控制台输入行,使用malloc将每行转换为字符串,然后通过每次动态重新分配内存将每个字符串添加到字符串数组中。我的目标是有一个数组,其中每个元素都是控制台输入的不同行( while循环应该以EOF结束)。

我的代码如下。

代码语言:javascript
复制
char * inputString = (char *)malloc(100);
char * aWord = (char *)malloc(1);
char ** listWords = (char **)malloc(1);
int wordCount = 0;

while (fgets(inputString, 100, stdin) != NULL)
{       
    wordCount++;
    *(inputString + (strlen(inputString) - 1)) = '\0';
    aWord = (char *)realloc(aWord, strlen(inputString) + 1);
    aWord = inputString;

    listWords = realloc(listWords, sizeof(char) * wordCount);
    *(listWords + (wordCount - 1)) = aWord;
}

for (int i = 0; i < wordCount; i++)
    printf("%s\n", listWords[i]);

如果我在控制台中输入

代码语言:javascript
复制
abc\n
b\n
cad\n
^Z\n

从理论上讲,我希望打印出我的代码

代码语言:javascript
复制
abc\n
b\n
cad\n

控制台输入的每一行。相反,它会打印

代码语言:javascript
复制
cad\n
cad\n
cad\n

输入的最后一行。非常感谢你的帮助

EN

回答 2

Stack Overflow用户

发布于 2019-06-04 03:15:23

不能使用赋值复制字符串,必须使用strcpy()

代码语言:javascript
复制
strcpy(aWord, inputString);

另外,

代码语言:javascript
复制
*(listWords + (wordCount - 1)) = aWord;

可以简化为:

代码语言:javascript
复制
listWords[wordCount-1] = aWord;
票数 1
EN

Stack Overflow用户

发布于 2019-06-04 03:24:19

有三个问题。

首先,realloc不分配额外的aWord,而是增加/减少当前aWord的缓冲区,从而可能在释放旧地址的同时返回新地址。因此,aWord = (char *)realloc(aWord, strlen(inputString) + 1)将使内存适应新的大小,但您将丢失之前写入aWord的内容。请注意,*(listWords + (wordCount - 1)) = aWord会让您的最终列表指向aWord。使用malloc而不是realloc

其次,使用aWord = inputString;,您可以让aWord指向inputString,而不是复制其内容。请改用strcpy

代码语言:javascript
复制
char *aWord = malloc(aWord, strlen(inputString) + 1);
strcpy (aWord,inputString);

第三,您需要为字符指针预留空间,而不仅仅是字符。

代码语言:javascript
复制
listWords = realloc(listWords, sizeof(char*) * wordCount);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56433174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档