こんばんは、いつもお世話になっています。
C言語は初心者で、現在テキストを参考にしながら進めています。
WindowsのVistaを使っております。
char a[12] = "愛している";
このとき、'愛'だけを表示させるにはどうしたら、よいですか?
全角文字は2バイトで表現されるので、printf("%c", a[0]);はおかしいです。
文字列の配列
Re:文字列の配列
>char a[12] = "愛している";
>このとき、'愛'だけを表示させるにはどうしたら、よいですか?
とりあえず、'愛'は間違いです。シングルクオート(')は、その文字コードの値にします。
そのため、L'愛'と、ワイド文字表記にした方が良いと思、、、ったんですがcharなんですよね。なんだろう。
次のあるプログラムの実行結果を見てください。
要は、ABCを表示するときと一緒です。下記は、EUC-JPの場合の配置です。Shift-JISはまた異なります。
EUC-JPでは、0x00 から 0x7F までは1バイト長で表現されます。英数字、半角記号などはここに含まれます。
0x8E が出た場合、次のバイトが 0xA1 から 0xFE の間の値であれば、半角カタカナとなります。
0xA1 から 0xFE の間の値が出た場合、次のバイトが 0xA1 から 0xFE の間の値であれば、2バイト文字となります。
0x8F が出た場合、次と、その次のバイトが 0xA1 から 0xFE の間の値であれば、3バイト文字となります。
って、解決してましたね。@@・・・
文字を置き換える場合、2バイトから1バイト、1バイトから2バイトなど、必要な領域が変化する場合がありますので、
charで実装する場合、文字列置き換え時用の一時領域を確保することが必要になるかも知れません。
>このとき、'愛'だけを表示させるにはどうしたら、よいですか?
とりあえず、'愛'は間違いです。シングルクオート(')は、その文字コードの値にします。
そのため、L'愛'と、ワイド文字表記にした方が良いと思、、、ったんですがcharなんですよね。なんだろう。
次のあるプログラムの実行結果を見てください。
ADDRESS+ 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF NCSL 0x00000000 B4 C1 BB FA 00 .. .. .. .. .. .. .. .. .. .. .. ........... 1400これは、scanf()で「漢字」をEUC-JPで入力し、それを16進数で表したものです。
要は、ABCを表示するときと一緒です。下記は、EUC-JPの場合の配置です。Shift-JISはまた異なります。
EUC-JPでは、0x00 から 0x7F までは1バイト長で表現されます。英数字、半角記号などはここに含まれます。
0x8E が出た場合、次のバイトが 0xA1 から 0xFE の間の値であれば、半角カタカナとなります。
0xA1 から 0xFE の間の値が出た場合、次のバイトが 0xA1 から 0xFE の間の値であれば、2バイト文字となります。
0x8F が出た場合、次と、その次のバイトが 0xA1 から 0xFE の間の値であれば、3バイト文字となります。
って、解決してましたね。@@・・・
文字を置き換える場合、2バイトから1バイト、1バイトから2バイトなど、必要な領域が変化する場合がありますので、
charで実装する場合、文字列置き換え時用の一時領域を確保することが必要になるかも知れません。