charで日本語文字コードは扱えるのでしょうか?


ろっく  2008-04-06 19:52:28  No: 67978  IP: 192.*.*.*

shiftJISやEUCの文字列をchar型で扱うことができるのでしょうか?
たとえば、shiftJISで「表示」という文字列がメモリ上に存在していて、
それをchar型として扱ってファイルに書き出す、といったことは
問題にならないのでしょうか?

編集 削除
そだ  2008-04-06 21:10:58  No: 67979  IP: 192.*.*.*

出力がすべて英語で書かれた教本か何かを見てその上での疑問ですか?

一部マルチバイト文字を対象としない関数(atoiやらstrlenやら)
で意図しない動作をするかもしれませんがファイルに書き出すぐらいならできます。

編集 削除
επιστημη  URL  2008-04-06 21:52:12  No: 67980  IP: 192.*.*.*

たとえば 'あ' 一文字を char に代入はできません。
たとえ一文字でも文字列として扱うことになります。

編集 削除
ろっく  2008-04-06 22:25:49  No: 67981  IP: 192.*.*.*

そだ様、επιστημη様、
ご回答ありがとうございます。

説明が不足しておりました。申し訳ございません。

shift_jisのバイナリ表現をchar型で扱う際に、
たとえば「表」だと2バイト目が「5c」で\マークとなってしまい、
いろいろなトラブルに巻き込まれるのではないかと思いました。
shift_jisの文字列をファイルに書き出したり読み込んだりする
ことで、たとえ文字列途中に5cが含まれていても問題は発生しないのでしょうか?

char chr[255] = "表t表a表0";

このような文字列をファイルに書き出したり、
また、そのファイルから読み込んだりするときに
トラブルにはならないのでしょうか?
手元でfstreamで試してみると問題なく、書き出し・読み込みが
できているようなのですが。

編集 削除
επιστημη  URL  2008-04-06 22:45:48  No: 67982  IP: 192.*.*.*

back-slashによるエスケープはC/C++コードの文字/文字列リテラル内*だけ*で使われるものです。
ファイルIO時にback-slashエスケープは行われません。

# まれにファイル/フォルダ名に"表示画面"とかやってコケるものもありますが。

編集 削除
ろっく  2008-04-07 04:32:53  No: 67983  IP: 192.*.*.*

επιστημη様ありがとうございます。
ということはたとえば、ファイル中に
「abcd\0fg」という文字列があっても
読み込んだときはちゃんと「fg」まで取得できているということですね。
了解しました。
ありがとうございました。

編集 削除