首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >fscanf变量设置不正确。可能是realloc()

fscanf变量设置不正确。可能是realloc()
EN

Stack Overflow用户
提问于 2012-11-06 13:08:04
回答 2查看 123关注 0票数 2

Output表示,当文件fileIn的字正确有序地打印时,所有数组值都是“焦虑的”。我的问题可能在realloc()中?

代码语言:javascript
运行
复制
    ReadIn = malloc(sizeof(char) * 50);

    while(fscanf(fileIn, "%s", ReadIn) != EOF){
        wordlist = (char **)realloc( wordlist, (numwords + 1) * sizeof(char*));
        printf("%s\n",ReadIn);
        wordlist[numwords] = ReadIn;
        numwords++;
    }

    for(i = 0; i < numwords; i++){
        printf("%d %s\n", i , wordlist[i]);
    }

输出:

代码语言:javascript
运行
复制
This
is
a
journey
into
fear
and
anxiety.
0 anxiety.
1 anxiety.
2 anxiety.
3 anxiety.
4 anxiety.
5 anxiety.
6 anxiety.
7 anxiety.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-06 13:10:45

您让每个数组指针指向ReadIn缓冲区,该缓冲区将包含读入的最后一个字符串。

您希望复制读入的每个字符串:

代码语言:javascript
运行
复制
//change: wordlist[numwords] = ReadIn;
wordlist[numwords] = strdup(ReadIn);

当您使用完wordlist数组时,您还应该注意释放每个字符串。

如果您的编译器运行时库没有非标准的、但通用的strdup()函数,则很容易实现(或找到的公共领域版本)。

票数 3
EN

Stack Overflow用户

发布于 2012-11-06 13:16:44

wordlistnumwords = ReadIn;

在上面的代码行中,您只是简单地分配了“ReadIn”的地址,而不是字符串。因此,从包含在“ReadIn”中的文件中读取的最后一个字符串已被重复打印。

因此,您需要将读取的字符串复制到字符串数组中,

strcpy(wordlistnumword,ReadIn);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13244735

复制
相关文章

相似问题

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