2

当文件 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.
4

2 回答 2

3

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

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

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

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

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

于 2012-11-06T05:10:44.927 回答
0

wordlist[numwords] = ReadIn;

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

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

strcpy(wordlist[numwords], ReadIn);

于 2012-11-06T05:16:44.347 回答