0

ファイルのすべての行をchar配列に読み取ることができましたが、特定の行、つまり次の例のように254行を読み取りたい場合は、常にファイルの最後の行のデータを取得します。何が問題なのか考えてみてください。ありがとうございました。コードのサンプルは次のとおりです。

 while (fgets(line,2000,fp)!=NULL
{
 readData [n] = line;
 n++;
}
printf ("print line after %s\n",readData [254]);
4

3 に答える 3

2

毎回ポインタをコピーしています。したがって、最後に、配列のすべてのエントリがreadData同じメモリを指します。代わりにデータをコピーしてみてください:

readData[n] = strdup(line);

そして、完了したら覚えておいてfreeください。持っていない、strdupまたは使用したくない場合:

readData[n] = malloc(strlen(line) + 1);
strcpy(readData[n], line);
于 2012-04-26T06:47:38.250 に答える
1

「readData」はchar *の配列であると推測しているためreadData[n] = line、配列を常にデータの同じ「バッファー」に設定していると言えます。

もう少し似たものが必要です

char buffer[numLines][colsPerLine];
char line[colsPerLine];
while (fgets(line,2000,fp)!=NULL
{
   strcpy(buffer[n], line); // copy contents of line into the buffer
   n++;
}
printf ("print line after %s\n",buffer[254]);
于 2012-04-26T06:47:21.743 に答える
-1

シーク ポインターを使用して、カーソルを行 no に移動できます。そして、読書線を適用します。それがうまくいくことを願っています。

于 2012-04-26T06:47:33.073 に答える