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

标签 c arrays scanf

输出表示,当文件 fileIn 的单词正确且按顺序打印时,所有数组值都是“焦虑”。我的问题可能出在 realloc() 上?

    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]);
    }

输出:

This
is
a
journey
into
fear
and
anxiety.
0 anxiety.
1 anxiety.
2 anxiety.
3 anxiety.
4 anxiety.
5 anxiety.
6 anxiety.
7 anxiety.

最佳答案

使每个数组指针指向 ReadIn 缓冲区,其中将包含最后读入的字符串。

您想要复制读入的每个字符串:

//change: wordlist[numwords] = ReadIn;
wordlist[numwords] = strdup(ReadIn);

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

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

关于c - fscanf 变量设置不正确。可能是 realloc(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13244735/

相关文章:

c - 在调用 lapack 子例程之前我们需要复制矩阵吗

javascript - 为什么我无法将对象添加到数组中? [javascript]

javascript - 类似数组/映射的数据结构,具有对项目的唯一 ID 支持、O(1) get() 方法且无重复

通过引入数字直到按下 0 来计算算术和几何平均值

写入内存时 scanf C 中的 char[] 与 char*

c++ - 不允许第二个 setuid

c - 完美号码检查

检查是否分配了内存中的某个地址

php - PDO 插入数组值

c - 如果我在 scanf 函数中将 "&"与字符串一起使用会怎样?