第7章 文字列の扱い


今回は、文字列の扱いです。BASIC出身者が、最初に躓くのが 文字列の扱いです。(他の人は、知りませんが筆者は、この 文字列の扱いに「あれーーーー」と頭を悩ませました。) これについては、あとでポインタのところでまた触れますので、 この章では、さらっとさわりだけです。
まず、文字列を考える前に、文字型について考えてみましょう。 第5章で、述べたように 文字型は、charです。

ところで、charは何て読むの?

はい、「キャラ」と読む人が多いみたいです。中には、「チャー」と 発音する人もいます。まー、何でもいいみたいです。 charは、1バイト文字を表すデータ型です。 たとえば、次のように使います。

char ch='a';

こういう風に、宣言するとキャラ型の変数chに、「a」が入って いますよ、と言う意味です。 (aが、シングル・クォーテーションで囲まれて いることに注意してください。) 普通の数字みたいな取り扱いで OKです。実際chには、単なる数値が入っています。 実験してみましょう。
char型変数a,b,cに文字、「a」「B」「6」を代入します。 それを、printfで確かめます。文字型を表す書式 指定は、%cであることに注意してください。 次に、同じa,b,cを、書式指定%dで表示してみてください。
実行結果は、左の図のようになります。 「*には、文字*が入っています。」は、 想像通りの結果ですね。次の 「*には、数字*が入っています。」は、 どうでしょう。97,66,54という 数字が現れました。これは、実はa,B,6のアスキーコード なのです。アスキーコード表は、たいていの 入門書の最後の方のページについているので 確かめてください。

えっ!調べたが、そんなもの載っていないよ!

という人には、VC++のヘルプで「C/C++ 言語とランタイム リファレンス」 「キャラクター コード」「ANSI キャラクター セット」 の順に進んでいってください。コード表が見られます。

おー!ヘルプって便利だな!

ということがおわかりになると思います。

では、文字列はどう扱うの?

と、いう本題に入りましょう。誤解を恐れずに言えば、 「文字の配列で表す」ということです。 (厳密には正しくありません。でも今は、こういうふうに 理解しても支障はありません。ずーっと、このように理解 していてもあまり困ることはありません。でも、あまり おおっぴらにいうと、「あいつは、あまり物を知らない」と 思われるので、大きい声では言わない方がよいでしょう。 (^-^;) )

では、配列はどう表すの?

はい、次のように表します。

int a[3]; char c[5];

などのように宣言します。 最初の方は、int型の変数a[0],a[1],a[2]を宣言したと 考えればよいでしょう。[]の中の数字は、0から始まる ことに注意してください。 次の、char c[5];は、char型の変数c[0],c[1],c[2],c[3], c[4]をまとめて宣言したと考えてください。 a[2]や、c[0]などは、要素と呼ぶこともあります。 これらの要素は、普通の変数と同じに取り扱えます。 配列に、ついてはあとの章で詳しく解説しますので今は、 雰囲気だけで結構です。

では、文字列の解説です。 表したい文字列をダブル・クォーテーションで囲みます。 この囲まれた、物そのものは、文字列の最初の文字の アドレスを表します。最初から文字列を宣言するときは、 次のようにします。

char *str = "ABC";

これの意味するところは、
str[0]='A',str[1]='B',str[2]='C',str[3]='\0'
と言うことです。最後の「\0 」は、ヌル文字と言って 文字列の最後を表す記号だと思ってください。Cでは、 文字列の最後に、必ず¥0がつきます!従って "ABCD"と言う文字列は、5バイトです。自分で領域 を確保するようなときは、十分に気をつけてください。 また、上のような宣言の仕方は、かなり特殊な物なので いまは、こういうふうに宣言すると、思ってください。 あとの章でもっと違う方法を紹介します。 いろいろご不満も おありでしょうが、理屈はあとで考えるとして 次のように、ソースファイルを作って、ビルドしてみてください。

さて、これをビルドして実行してみてください。 puts()は、自分でヘルプで調べてみてください。

あー、実行する前に、どういうふうになるか予想してみてください。

想像したような結果になれば、この章は卒業です。
想像したのと別な結果になっても、今は気にする必要はありません。 気にせず、次に進んでください。

[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Oct/19/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。