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文字分は必要になります。