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 に答える