1

テキストエディット(OSX上)などの通常のアプリケーションを使用してテキストを入力すると、各文字列の末尾に同じ「\ 0」文字が含まれるので、読み通したときにその文字をfgets()取得して読むのをやめますか?

通常のテキストファイルを作成しましたが、fgets()その文字が見つかったときではなく、指定された長さの最後で停止し続けるため、通常のテキストファイルに書き込むときに実際に存在するかどうか疑問に思います。

例えば:

How Are You
There

fgets(str、15、stdin); これは最終的に次のものを生成します:TherAre You

4

3 に答える 3

3

いいえ、通常、テキストファイルには文字は含まれていません\0fgets要求された文字数、または行の終わりのいずれか早い方を読み取ります。fgetsを追加するのはそれ自体です\0マニュアルページから:

fgets()ストリームから最大で1つ小さいサイズの文字を読み込み、 sが指すバッファーにそれらを格納します。EOFまたは改行の後に読み取りが停止します。改行が読み取られると、バッファに格納されます。終了ヌルバイト('\0')は、バッファの最後の文字の後に格納されます。

于 2012-09-13T06:28:25.273 に答える
0

いいえ、テキストファイルには通常制御文字は含まれていません。終了はCの「機能」、つまりC言語と環境が文字列でどのように機能するかという特性です。テキストファイルはCに依存しません。終了は、関数によって(データが読み込まれたメモリ内バッファに)追加されfgets()ます。

于 2012-09-13T06:29:07.167 に答える
0

入力ファイルにnullバイトが含まれていて、fgets()それと同等のものを読んでいる場合、文字列の途中のnullが'text'ファイルのnullであるか、ファイルの最後の行を示しているのかを判断するのは困難です。改行で終わっていないか、行が切り捨てられました。明らかに、別の読み取りを試みてより多くのデータを取得した場合、それは時期尚早のEOFではありませんでした。ヌルバイトの直前の文字が改行である場合、ヌルバイトは。によって追加された文字列マーカーの終わりであると見なすことができますfgets()

したがって、一般的に、ファイルにnullバイトが含まれている場合は、ファイルfgets()の読み取りに使用することはお勧めできません。

于 2012-09-13T06:38:20.503 に答える