このコードには、1 組 (またはそれ以上) の目を使用できます。ファイルストリーム(f1)から配列/バッファ(ファイルはテキストファイル、配列はchar型)に一定量のバイトを読み込もうとしています。サイズ「buffer - 1」で読み取った場合、配列を「再割り当て」し、中断したところから読み取りを続行します。基本的に、未知のサイズのファイルのバッファを動的に拡張しようとしています。私が疑問に思っていること:
- 私はこれを間違って実装していますか?
- コードをそのまま使用して、「realloc」などの障害条件を確認するにはどうすればよいですか?
- 「組み込み関数reallocの暗黙の宣言...」についてコンパイルすると、多くの警告が表示されます(read、malloc、strlenなどの使用についてもその警告が表示されます.
- 「read()」が 2 回目 (および 3 回目、4 回目など) に呼び出されると、毎回ストリームの先頭から読み取られますか? それは私の問題かもしれませんが、最初の「buff_size」文字のみを返すようです。
スニペットは次のとおりです。
//read_buffer is of size buff_size
n_read = read(f1, read_buffer, buff_size - 1);
read_count = n_read;
int new_size = buff_size;
while (read_count == (buff_size - 1))
{
new_size *= 2;
read_buffer = realloc(read_buffer, new_size);
n_read = read(f1, read_buffer[read_count], buff_size - 1);
read_count += n_read;
}
この種の動的読み取りを行う方法を学んでいるので、誰かがこの種のベストプラクティスについていくつかの簡単な事実を述べることができるかどうか疑問に思っています. これはプロの世界でトンになると思います(未知のサイズのファイルを読む)?御時間ありがとうございます。ALSO: 物事を行うための良い方法 (つまり、この種の問題に対するテクニック) を見つけたとき、それをどのように行ったかを覚えていますか、それとも将来参照できるように保存していますか (つまり、解決策はかなり静的です)?