身につくC言語-5回目 配列 文字列のあつかい-

C言語では、大きく次のような要素に別れます。

 

  • 整数
  • 小数
  • 1文字
  • 文字列

というような感じです。

 

注意すべきは「1文字」と「文字列」は全く違うんだよ、ということです。

 

以前書いたこともあると思いますが、この2つは「\0」との関係が関わってきます。

 

1文字と文字列の違い

まず1文字を入力してみると、

 


char a;
scanf("%c",&a);

という風になると思います。

 

「k」を入力したとするとプログラムのなかでは、

 

k

 

として扱われます。

 

当たり前の事ですよね。

 

しかし、文字列を入力してみると、

 


char a;
char b;
char c;

scnaf("%c",a);
scnaf("%c",b);
scnaf("%c",c);

 

となります。

 

ここに「k」と「o」を入力してみましょう。

 

すると、

 

ko\0

 

となります。

 

これは、C言語に「文字列の終わりには\0をつけろよ」という決まりがあるためです。

 

「\0」とは文字列の最後という意味があります。

 

これを定義しないと、文字列はどこまでも続いていってしまい結果としてその部分が「無駄」になってしまうからです。

 

文字列を出力するにはほかの書き方がある

基本的な考え方としては、文字列というのはchar型の集まりと考えていいでしょう。

 

そこでよく使うのが、「配列」というモノです。

 

ではこのソースコードを書いてみてください。

 


#include<stdio.h>

int main(void)
{
	char a[3];
	
	a[0]='k';
	a[1]='o';
	a[2]='\0';
	
	printf("%s",a);
	
	return 0;
	
}

 

koと出力されるはずです。

 

char型に代入するときは、”で囲むんでしたよね。

 

ここで大切なのは

 

char a[3];

 

というところです。

 

これは

 

a[0]とa[1]とa[2]

 

という変数を一気に宣言するということです。

 

ですから、a[0]に’k’を、a[1]を’o’を、a[2]に’\0’を入れているわけです。

 

配列は文字列として扱われる場合がほとんどですから、終わりには必ず「\0」を入れましょう。

 

そして文字列を出力する場合は、

 

「%s」を使用します。

 

文字列を入力する

文字列を入力する時は、予想される文字列量よりも多く宣言しておきましょう。

 

もし宣言した数よりも多くを入力されてしまった場合、重大なエラーにつながる危険性があるからです。

 

ソースコード


#include

int main(void)
{
	char a[50];
	
	scanf("%s",a);
	
	printf("%s",a);
	
	return 0;
	
}

 

ここで大切なのは、

 

配列を使い入力するときは&をつけない

 

ということです。

 

なぜかというのは「アドレス」というところで詳しく説明したいと思います。

 

いまは、文字列だけには「&」をつけないということです。

 

ここはかなり忘れがちです。

 

char a[50]というのは、char型のa[0]~a[49]までの変数を一気に宣言するということです。

 

かりに「hello world」と入力したとしましょう。

 

すると、

 

hello world\0

 

と自動で入力されます。

 

エンターを押すことで勝手に「\0」をつけてくれるんですね。

 

まとめ

ここでは、

 

char a[3]というのは、char型のa[0]~a[2]を宣言したことと同じだよということを覚えていれば大丈夫です。

 

そして、「\0」というのは文字列の終わりだということを覚えておきましょう。

 

ちなみに「は」などのひらがなは、C言語では「ha」として扱われます。

 

char型を2文字分使うということです。

 

「おはよう」は「ohayou\0」となるため最低でも7文字分は必要になります。