改行を入れるだけで十分なようですが、キャリッジリターン+改行のはずです。キャリッジリターンを配置せず、ラインフィードのみを使用すると、何か恐ろしいことが起こりますか?
これはANSICにあり、ファイルなどにリダイレクトされることはありません。通常のコンソールアプリです。
改行を入れるだけで十分なようですが、キャリッジリターン+改行のはずです。キャリッジリターンを配置せず、ラインフィードのみを使用すると、何か恐ろしいことが起こりますか?
これはANSICにあり、ファイルなどにリダイレクトされることはありません。通常のコンソールアプリです。
Windows コンソールは、ファイルや実際の物理端末で想定されるのと同じ行末規則に従います。次の行に正しく移動するには、CR と LF の両方を確認する必要があります。
つまり、ANSI C プログラムとそのコンソールの間には多くのソフトウェア インフラストラクチャがあります。特に、標準の C ライブラリ I/O 関数は、チャンスがあれば、正しいことをしようとします。これが、パラメーターfopen()
のt
およびb
修飾子が定義された理由です。mode
t
(ほとんどのストリーム、特に and のデフォルトstdin
)を使用すると、出力されたものはstdout
すべて\n
CRLF シーケンスに変換され、読み取りの場合は逆になります。その動作をオフにするには、b
修飾子を使用します。
ちなみに、XTerm でエミュレートされた DEC VT100 を含む、伝統的に *nix ボックスに接続されている端末も、CR と LF の両方が必要です。ただし、* nix の世界では、改行文字から CRLF シーケンスへの変換は tty デバイス ドライバーで処理されるため、ほとんどのプログラムはそれについて知る必要がなく、修飾子t
とb
修飾子は両方とも無視されます。これらのプラットフォームで、その変更を行わずに tty で文字を送受信する必要がある場合は、stty(1) またはそれが依存するシステム コールを検索する必要があります。
ANSI C プログラムがコンソールへの C ライブラリ I/O を回避している場合 (おそらく、コンソールの文字色やその他の属性にアクセスする必要があるため)、CR を送信する必要があるかどうかは、使用している Win32 API 呼び出しによって異なります。文字を送信します。
*nix 環境であれば \n (改行) で十分でしょう。Windows を使用していて (現在) リダイレクトしていない場合、改行も問題ありませんが、誰かがリダイレクトした場合:-(
ただし、Windows を使用している場合、出力がテキスト ファイルにリダイレクトされ、別のプロセスがデータを消費しようとすると、問題が発生する可能性があります。
コンソールは何を表示するかを知っていますが、消費者は満足しないかもしれません...
C# を使用している場合は、Environment.NewLine "constant" を試すことができます。
http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx
本当にバニラ c を使用している場合は、\r\n で立ち往生しています。:-)
長い間試していないので、何が起こったのか覚えていません...しかし、改行自体は左の列に戻らずに行を下に移動しませんか?
コンパイラによっては、標準出力がテキスト モードで開かれる場合があります。この場合、単一の改行は、書き出される前に \r\n に変換されます。
編集:簡単なテストを試したところ、XPではリターンのないファイルが正常に表示されました。コンパイラがリターンを挿入するかどうかはまだわかりません。
それは、それらを何に使用しているかによって異なります。との両方を入れないと改行が正しく表示されないプログラムも\r
あり\n
ます。
テキスト ファイル (または出力) を使用する一部のプログラムのみを作成しようとすると\n
、テキストが複数行ではなく 1 行として表示される場合があります。
\r
と の両方を使用しないと完全に無効になるファイル形式とプロトコルもいくつかあります\n
。
C では、ファイル (「ストリーム」と呼ばれる) には、バイナリとテキストの 2 つの種類があります。
この区別の意味は実装/プラットフォームに依存しますが、Windows (私が見た一般的な実装) では、テキスト ストリームへの書き込み時に「\n」が自動的に「\r\n」に変換され、テキストからの読み取り時にストリーム "\r\n" は自動的に '\n' に変換されます。
「コンソール」は実際には「標準出力」であり、デフォルトでテキスト ストリームとして開かれるストリームです。したがって、Windows での実際の動作としては、"Hello, world!\n" と書くだけで十分であり、移植可能です。