ファイルから配列への一連のシングルワード線をロードする必要があります。そのために関数を作成しました。この関数はパラメータとしてchar*** arr
をとります。これは文字列の配列へのポインタです。私はメモリを割り当て、次に配列に単語をロードするためにこのループを持っています。C:char *配列の最後の要素すべての配列エントリを書き換えます
i=0;
FILE *fp = fopen(filename, "r");
while(fgets(tok, WORD_BUFFER, fp) != NULL){
(*arr)[i] = tok;
printf("Word %d:%s", i, (*dict)[i]);
i++;
}
//arr is a char***, tok is a char[WORD_BUFFER], and WORD_BUFFER is 50
私の問題は、これは私が[i]の項目に入力しようとしているものは何でも持つ配列のすべてのエントリを上書きしているように見えるということです。
A
B
C
D
私は(あるいは単に、後でその関数内)、main関数で配列を印刷するときただし、正しく印刷するようだ:次のようになり、ファイルのための上記のループの出力はので、私はこれを言います私はそれが私のfgets
の使用または(*arr)[i] = tok
の割り当てとは何かを持って推測しているが、私はよく分からない
D
D
D
D
:、それは次のようにプリントアウトされます。 ありがとう!
この文の後に(* arr)[i] = tok;配列のすべての要素は変数tokと同じ値を持ちます –
なぜですか?なぜそれだけでarr [i]がtokの価値を持っているのではないでしょうか? – Jeb
'='演算子を使ってポインタを代入するだけです。 'tok'は、ループ中のすべての繰り返しでファイルに上書きされます。したがって、すべてが 'tok'を指しています。これはファイルから最後に読み込まれた行です。保存する場合は、ループのたびに 'tok'から別の場所にデータを転送する必要があります([strcpy'](https://linux.die.net/man/3/strcpy)。 – yano