文字列


・実は難しい文字列

 文字列を本当に理解するのは結構たいへんなのですが文字列も使えないとなにかと不便なのでここでは難しい話はおいておいて大雑把に説明します。

・文字と文字列

 「文字」は一文字だけの文字でchar型で扱っていました。 「文字列」はchar型が列になったものつまり単語や文章のような「文字」の集まりです。 よって文字列はchar型の配列であると思っておきましょう。

char str[8]={'M','a','n','s','a','k','u','\0'};

printf("My name is %s",str);
文字はシングルクォーテーションで囲うのでしたね。 最後の\0は文字列の終わりを意味しています。 文字列をprintfで表示する時は%s(文字(char型)は%c)を使い、後ろの変数名のところは添え字をつけずに書きます。

・書き方いろいろ

 以下は全て同じです。

char str[8]={'M','a','n','s','a','k','u','\0'};
char str[8]="Mansaku";
char str[]="Mansaku";
二番目以降のように文字列は普通ダブルクォーテーションで囲って表します。 この時\0は入りませんが配列のサイズは\0をカウントして用意しなければならないので気をつけてください。 三番目の書き方だとこのような心配はいりません。 要素数を省略すると初期値にあわせてメモリを確保してくれます。

・注意点

 文字列はint型の変数などと違い単純に比較したり代入したりできません。 以下は間違った例です。

str="Mansaku";

if(str1==str2)
配列変数の添え字部分の[ ]を除いたものがなにを意味するのか知っていればこのことは自明なのですが、難しい話は後回しなのでとりあえずは規則として覚えましょう。 なお宣言時は普通に=で代入して大丈夫です。 int型の時は宣言時の初期化が単なる初期値の代入と同じことだったので宣言と同時に初期化するのも宣言だけしてから後で初期値を代入するのも同じようにできましたが、文字列の場合はint型と違い宣言時に初期化するのと同じようには代入できないということです。 あと一応
char str[8];
str[0]='M';str[1]='a';str[2]='n';str[3]='s';str[4]='a';str[5]='k';str[6]='u';str[7]='\0';
という代入のしかたはOKですが普通やりません。

・ではどうするか

 string.hに文字列に関する様々な関数が用意されているのでこれを使います。 代入、比較を行う関数はもちろん長さを調べたり文字列同士をつないだり一部を抜き出したり…と文字列操作と言えばstring.hです。 13章で述べたように個々の関数の説明をしていたらきりがないし覚えるようなものではないので必要になった時に調べてみましょう。