質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

6138閲覧

全角の配列による文字列について

macg3n

総合スコア60

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2017/10/22 05:23

全角文字は一文字につき2バイトで表現されると認識しています。そのため、以下のようにすれば

c

1#include <stdio.h> 2int main() 3{ 4 char s[][3]={"赤","青"}; 5 printf("%s",s[0]); 6 return 0; 7}
列1列2列3
(あか)\0
(あお)\0

のように配列に入り、((あか)は『赤』で2箇所使っているということです。)
実行すると、s[0]の部分の

のみが表示されると思ったのですが、実際は
赤青
となりました

なぜこのようになるのでしょうか。

ちなみに、
char[][3] のところを char[][4] とやると 赤 のみが表示されるようになりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

"赤"や"青"という文字が何バイトで構成されるかは文字コードによって違います。CP932、Shfit_JIS、EUC-JP、UTF-16であれば2バイトですが、UTF-8の場合は3バイト、UTF-32であれば4バイトです。Cではu8""などとしない限りどの文字コードになっているかは環境依存になるため、2バイトになる場合もあれば3バイトになる場合もありますので、不思議なことではありません。文字コードが何になっているかを確認してください。環境依存にしたくない場合はu8""等を使って下さい。

また、同じ漢字でも"????"("吉"ではありません)はUTF-8やUTF-16では4バイトです。文字に依らずUnicode文字が全て固定バイト長にしたい場合はU""でUTF-32を使用し、char32_tで処理する必要があります。

投稿2017/10/22 05:36

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macg3n

2017/10/22 23:47

丁寧にありがとうございました!
guest

0

ベストアンサー

もしかしてUTF8文字環境で作成されているのではないでしょうか。
UTF8での漢字は3バイトになります。

EUC環境ではお望みの通りになると思います。

投稿2017/10/22 05:29

編集2017/10/22 05:34
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macg3n

2017/10/22 05:35

すごく単純な話だったんですね。無知さを痛感させられます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問