ここから本文です

http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01023.html

アバター

ID非公開さん

2019/2/822:25:11

http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01023.html

このサイトでc++を勉強しているのですが、気になる事があります。

このページにあるプログラムは「やぁ、こんちは」を表示させてそれぞれの文字コードを見る、というモノです。
"やぁ、こんちは"で7文字だから、この文字列の文字コードはヌルターミネータを合わせて8個のはずですよね?なのになぜかfor文で14度もループさせていて、しかもなぜか実行結果が表示されるのが理解できません。
これはどういうことなんでしょうか…
詳しい方、宜しくお願い致します。

閲覧数:
22
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

ikt********さん

2019/2/912:52:34

> "やぁ、こんちは"で7文字だから、...

C言語族の組み込み型 char は
「文字」を意味する型ではない
と理解した方がいいです。
8ビット整数型 にすぎない。
現代の大多数のコンピュータで 1バイト と
呼ばれる単位に相当する型。

C言語が生まれたのは、英語圏です。
アルファベット文字は、文字種が少なく、
たかだか7ビットですべて表せます。
http://e-words.jp/p/r-ascii.html
なので、英語圏の人にとってはs
1 char := 1文字
が成立する。

けど、日本語の文字は、大変種類が多いので、
とても8bitでは足りません。
なので、C言語族でいうところの char という
容器の 複数 を使って、1文字 を表す。
なので、
>なぜかfor文で14度もループさせていて...
ということになる。



Cよりもずっと後から登場した、親切?な
プログラミング言語の多くでは、ちゃんとした
文字の概念
文字型
を持っていて、日本人が言うとこの
全角文字 も 半角文字も 1文字
に演出してくれてたりするんですが、C言語族のchar
はそうではありません。




P.S.
ロベールさんの記事では、前章とかで
・文字コード
のお話をきちんと解説されてると思う。
それをちゃんと読みましたか?
たとえば、22章冒頭で、書かれてますよね?
・文字は通し番号で扱う
・通し番号は文字コードと呼ばれる
・半角文字は1バイト、全角文字は2バイト

文字コード という概念自体が理解できないので
生じてる疑問なのか、
それはわかってるけど C(C++) の char が
あなたの脳内ではなぜか バイト ではなく 文字
と認識してしまっていたというだけの話なのか。

どちらなんでしょうね。(^_^;)

アバター

質問した人からのコメント

2019/2/9 13:47:58

すっかりビット、バイトの話を忘れてました。
ありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

ext********さん

2019/2/823:34:01

全角文字は2バイトだからです。

'や' これで2バイト使います。半角文字の2文字分です。
だから、全角7文字なら、半角14文字つかいますので、
14回loopで正しいです。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる