- 締切済み
MacOSXのgccのprintfで改行が出ない件
Mac OS X 付属のgccで printf( "Hello\n" ); とやっても改行が出力されません。 よくよく調べてみると\nと記述しても0x0aが配置されないため 改行されないので、仕方なく printf( "Hello%c" , 0x0a ); と記述するとやっと意図通りの 挙動になります。 しかし可読性、移植性含めてこれでは解決になりません。 どなたか、解決方法を知りませんか?
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- kazuma1956
- ベストアンサー率50% (1/2)
Macでは、\(yen)記号とバックスラッシュは、別のコードとして扱われます。 もし、エディタ(viなど)で、\(yen)と表示されるのならば、[option]+\ と入力してみてください。 これでバックスラッシュが表示されればOKです。 \をバックスラッシュにデフォルトで設定する方法はあるのですが、忘れました。 これはインターネットでしらべてみてください。
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
追記の追記 >linuxやWindowsからのソースコピーで、なにも触らずに >MacOS Xのgccに投げても改行されない問題点が出ました。 ソースを持って来る時に「バイナリで転送」しましたか?それとも「テキストで転送」しましたか? テキストで転送すると、転送ツールによっては「テキストモードでは、勝手に『5C』の¥を、『A5』の¥に書き替える」ので、テキストモードでソースをコピーして持って来ても正しくコンパイル出来ない場合があります。 また、バイナリで転送すると「改行コード」が悪さして、バイナリモードでソースをコピーして持って来ても正しくコンパイル出来ない場合があります。 ま、転送がテキストでもバイナリでも「コピーして持って来ただけじゃ、マトモにコンパイル出来ない」のは変わらないので「手でチマチマ、おかしくなった所を打ち直す必要がある」のは避けられません。頑張って下さい。
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
追記。 >「エスケープ文字が何なのか知りたい」なら >(中略) >キーボードから、その文字を打って下さい。 http://www.yoshidam.net/diary/200312.html#d08_t3 によると「Optionキー+¥」で「バックスラッシュ」が打てるようです(アプリによって打てないアプリもある) 改行は「Optionキー+¥」「n」で入力して下さい。 http://www.bison.jp/nucleus/index.php?catid=8 のブログの http://www.bison.jp/nucleus/index.php?itemid=111&catid=8 「円マークとバックスラッシュ」から http://www.bison.jp/nucleus/index.php?itemid=124&catid=8 「円マークとバックスラッシュ(その9)」まで読んでおくと良いでしょう。
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
>よくよく調べてみると\nと記述しても0x0aが配置されないため >改行されないので そうですね。MacOS Xでキーボードから「\」を打っても「エスケープ文字ではない、変な文字」が入力されるので「\n」は改行にはなりません。 MacOS Xには、キーボードの別のキーに半角の「\」(バックスラッシュ)があって、それを押すと「半角の\」が押せるので、それを押して下さい。 そうすれば「printf( "Hello\n" );」で、ちゃんと改行します。 なお、本来、改行は「\n」ではなく「\n」なのですが、日本語圏では「\に相当するキーを押すと¥が押され、英語圏で\に相当する文字に¥のフォントが設定されている」ので、日本では「改行は¥nだ」と「誤解」されています。 「エスケープ文字が何なのか知りたい」なら printf("%c",0x5c); を実行してみて下さい。これで出た文字がエスケープ文字(99.99%以上の確率で「\じゃない文字」が出る筈)なので、キーボードから、その文字を打って下さい。
- notnot
- ベストアンサー率47% (4900/10358)
>ソースコードをxxdでのぞいても、unicodeではなかったですし \の部分は具体的にどんなコードだったのでしょうか? 少なくとも、0x5C であれば \n は改行になるので、それ以外のコードですよね? そもそも、その文字はMacOS上でキーボードから入力したのでしょうか? それとも外部からファイルをコピーしたのでしょうか?その場合、どういう手段でコピーしたのでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
規格上はバックスラッシュの代わりに ??/ が使えるのですが, gcc でサポートされているかどうかは知らない.
- notnot
- ベストアンサー率47% (4900/10358)
バックスラッシュがユニコードの円記号になってしまうことがあるようです。 「mac 円記号」で検索してみてください。
お礼
情報、どうもありがとうございます。 ただ、自分のケースでは 原因はUnicodeの円記号になってしまうことではなかったようです。 ソースコードをxxdでのぞいても、unicodeではなかったですし linuxやWindowsからのソースコピーで、なにも触らずに MacOS Xのgccに投げても改行されない問題点が出ました。