0
私はいくつかのファイルを繰り返し処理し、各行の情報を動的に割り当てられた文字列配列に入れようとしています。私はこのような配列を割り当てました:ファイルの繰り返しと文字列への情報の追加 - C
followerArr = malloc(sizeof(char *) * (followerCount + 1));
for (i = 0; i < followerCount; i++)
followerArr[i] = malloc(sizeof(char) * 15);
これは完全にうまくいくようです。その後、ファイルの最後までファイルを調べ、ユーザーの名前を文字列配列に入れたいと考えました。
if (followerCount > 0) {
fp3 = fopen(followerFile, "r");
if (fp3 == NULL)
printf("Error opening file\n");
else {
char line[1000];
while (fgets(line, sizeof(line), fp3) != NULL) {
if (i > 0)
followerArr[i - 1] = line;
i++;
}
fclose(fp3);
}
}
I:
最初の番号は、ファイル内のユーザー数が、この場合には、4
user1
user2
user3
user4
4.ファイルスキャンのための私のコードはこれです:ファイルの1つは、このように見えましたまた、whileループでprint文を行なったし、それが
user1
user2
user3
user4
を印刷します。すなわち、それは、通常のプリントアウトしかし、whileループの後、ファイルを閉じて、それはすべての4倍USER4出力します。配列が基本的にそれがwhileループに入ってから外に出てから変化しているのはなぜですか?
文字列を解放する必要があるとして、[I - 1] = line'。基本的には、すべての配列要素に同じデータをコピーしています。ループの*行を*代入後に(そして配列から)出力すると、それを見ることができます。 – usr2564301
それは、whileループでは動作するが、afterループでは機能しないので、意味をなさないでしょう。データがアレイに正しく書き込まれるように、どうすれば修正できますか? – bmw417
メモリが漏れています。 'followerArr [i]'に割り当てられたメモリを割り当てた後、その値を上書きします。代わりに 'strncpy'を使用してください – MFisherKDX