ファイルのすべての行をchar配列に読み取ることができましたが、特定の行、つまり次の例のように254行を読み取りたい場合は、常にファイルの最後の行のデータを取得します。何が問題なのか考えてみてください。ありがとうございました。コードのサンプルは次のとおりです。
while (fgets(line,2000,fp)!=NULL
{
readData [n] = line;
n++;
}
printf ("print line after %s\n",readData [254]);
ファイルのすべての行をchar配列に読み取ることができましたが、特定の行、つまり次の例のように254行を読み取りたい場合は、常にファイルの最後の行のデータを取得します。何が問題なのか考えてみてください。ありがとうございました。コードのサンプルは次のとおりです。
while (fgets(line,2000,fp)!=NULL
{
readData [n] = line;
n++;
}
printf ("print line after %s\n",readData [254]);
毎回ポインタをコピーしています。したがって、最後に、配列のすべてのエントリがreadData
同じメモリを指します。代わりにデータをコピーしてみてください:
readData[n] = strdup(line);
そして、完了したら覚えておいてfree
ください。持っていない、strdup
または使用したくない場合:
readData[n] = malloc(strlen(line) + 1);
strcpy(readData[n], line);
「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]);
シーク ポインターを使用して、カーソルを行 no に移動できます。そして、読書線を適用します。それがうまくいくことを願っています。