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

时间:2012-11-06 05:08:04

标签: 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.

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:0)

wordlist [numwords] = ReadIn;

在上面的Line中,您只需指定'ReadIn'的地址而不是字符串。所以从'ReadIn'中包含的文件中读取的最后一个字符串已经重复打印。

所以,你需要将读取的字符串复制到你的字符串数组

strcpy(wordlist [numwords],ReadIn);