• ベストアンサー

改行のことで

標準入力ストリームでは「改行」は標準ストリームのバッファに入る前 にCRLFから\nへと自動変換されるのでしょうか? それとも標準ストリームのバッファから実引数へ入れる時にCRLFから\nへ変換されるのでしょ うか? (windowsOS、C言語)

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

バッファに入る時点で変換されていると思います. 標準入力ストリームはテキストストリームであり, 規格では Characters may have to be added, altered, or deleted on input and output to conform to differing conventions for representing text in the host environment. Thus, there need not be a one-to-one correspondence between the characters in a stream and those in the external representation. となっていますから, 「バッファと外部との間でやりとりするときに変換する」という解釈が妥当だと思います. とはいえ, 事実上「知ってても使えない」知識のような気がしますがどうなんでしょう?

harusan90
質問者

お礼

細かいところが気になったのでお聞きしましたw 参考になりました、本当に有難うございます。

その他の回答 (2)

回答No.3

改行はバッファに入る前に変換されます。 従って、ストリームのバッファ上(ungetchar用の1文字バッファも含む)には\nしか存在しません。

harusan90
質問者

お礼

参考になりました、本当に有難うございます。

  • Tinte
  • ベストアンサー率45% (27/60)
回答No.1

そこら辺りの機能に詳しい者ではないので間違っているかもしれませんが、標準入力に入ってくるCRLFの改行コードは自動的には変換されないと思います。なので用途に応じて自分で改行コードを調節するのが一番いいと思います。 どのような端末やプログラム言語を使うのかにもよりますが、例えばWindows同士での改行コードの変換は必要ないですし、スクリプトで文字列を処理する場合などは、改行コードを一度削除していろいろと処理をしてから最後に適当な改行コードをつけて出力したりすることと思います。

harusan90
質問者

お礼

回答していただき有難うございます。