1 行を読み取ろうとしていますが、改行文字がどのように表現されているかわかりません。fgets() でファイルから読み取る場合、2文字または1文字と見なす必要がありますか? たとえば、ファイルに 15 文字の行 + 新しい行があります。では、文字列を安全に割り当ててその行を読み取るにはどうすればよいでしょうか?
最初に、私はこれを試しました:
char buf[16];
fgets(buf, 16, f);
改行文字なしで行を正しく読み取り、buf[15] がヌル文字を保持していると仮定します。
しかし、改行文字を読み込んで保存したい時、思うように動きません。私が知る限り、'\n' は 1 文字と見なされ、1 バイトしか必要ないため、それを読み取るには、もう 1 文字読み取る必要があります。
しかし、私はこれを試してみると
char buf[17];
fgets(buf, 17, f);
前の例とまったく同じことを行います-文字列に改行文字が保存されています(この場合、null文字がどこに保存されているかわかりません)
改行で行全体を読み取るには、これを行う必要があります
char buf[18];
fgets(buf, 18, f);
またはこれ(動作しますが、安全かどうかはわかりません)
char buf[17];
fgets(buf, 18, f);
質問は、行に15文字+改行しかないのに、なぜ18文字を割り当てて読み取る必要があるのですか?