プロが教える店舗&オフィスのセキュリティ対策術

Mac OS X 付属のgccで printf( "Hello\n" ); とやっても改行が出力されません。
よくよく調べてみると\nと記述しても0x0aが配置されないため
改行されないので、仕方なく
printf( "Hello%c" , 0x0a ); と記述するとやっと意図通りの
挙動になります。
しかし可読性、移植性含めてこれでは解決になりません。

どなたか、解決方法を知りませんか?

A 回答 (7件)

Macでは、\(yen)記号とバックスラッシュは、別のコードとして扱われます。


もし、エディタ(viなど)で、\(yen)と表示されるのならば、[option]+\
と入力してみてください。
これでバックスラッシュが表示されればOKです。
\をバックスラッシュにデフォルトで設定する方法はあるのですが、忘れました。
これはインターネットでしらべてみてください。
    • good
    • 2

追記の追記



>linuxやWindowsからのソースコピーで、なにも触らずに
>MacOS Xのgccに投げても改行されない問題点が出ました。

ソースを持って来る時に「バイナリで転送」しましたか?それとも「テキストで転送」しましたか?

テキストで転送すると、転送ツールによっては「テキストモードでは、勝手に『5C』の¥を、『A5』の¥に書き替える」ので、テキストモードでソースをコピーして持って来ても正しくコンパイル出来ない場合があります。

また、バイナリで転送すると「改行コード」が悪さして、バイナリモードでソースをコピーして持って来ても正しくコンパイル出来ない場合があります。

ま、転送がテキストでもバイナリでも「コピーして持って来ただけじゃ、マトモにコンパイル出来ない」のは変わらないので「手でチマチマ、おかしくなった所を打ち直す必要がある」のは避けられません。頑張って下さい。
    • good
    • 1

追記。



>「エスケープ文字が何なのか知りたい」なら
>(中略)
>キーボードから、その文字を打って下さい。

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 …
「円マークとバックスラッシュ」から
http://www.bison.jp/nucleus/index.php?itemid=124 …
「円マークとバックスラッシュ(その9)」まで読んでおくと良いでしょう。
    • good
    • 1

>よくよく調べてみると\nと記述しても0x0aが配置されないため


>改行されないので

そうですね。MacOS Xでキーボードから「\」を打っても「エスケープ文字ではない、変な文字」が入力されるので「\n」は改行にはなりません。

MacOS Xには、キーボードの別のキーに半角の「\」(バックスラッシュ)があって、それを押すと「半角の\」が押せるので、それを押して下さい。

そうすれば「printf( "Hello\n" );」で、ちゃんと改行します。

なお、本来、改行は「\n」ではなく「\n」なのですが、日本語圏では「\に相当するキーを押すと¥が押され、英語圏で\に相当する文字に¥のフォントが設定されている」ので、日本では「改行は¥nだ」と「誤解」されています。

「エスケープ文字が何なのか知りたい」なら
printf("%c",0x5c);
を実行してみて下さい。これで出た文字がエスケープ文字(99.99%以上の確率で「\じゃない文字」が出る筈)なので、キーボードから、その文字を打って下さい。
    • good
    • 1

>ソースコードをxxdでのぞいても、unicodeではなかったですし



\の部分は具体的にどんなコードだったのでしょうか?
少なくとも、0x5C であれば \n は改行になるので、それ以外のコードですよね?

そもそも、その文字はMacOS上でキーボードから入力したのでしょうか?
それとも外部からファイルをコピーしたのでしょうか?その場合、どういう手段でコピーしたのでしょうか?
    • good
    • 0

規格上はバックスラッシュの代わりに ??/ が使えるのですが, gcc でサポートされているかどうかは知らない.

    • good
    • 0

バックスラッシュがユニコードの円記号になってしまうことがあるようです。


「mac 円記号」で検索してみてください。
    • good
    • 0
この回答へのお礼

情報、どうもありがとうございます。
ただ、自分のケースでは
原因はUnicodeの円記号になってしまうことではなかったようです。
ソースコードをxxdでのぞいても、unicodeではなかったですし
linuxやWindowsからのソースコピーで、なにも触らずに
MacOS Xのgccに投げても改行されない問題点が出ました。

お礼日時:2009/02/02 02:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!