Tips

C言語 文字の扱い 【基礎 第15回】

文字の扱い

char型

C言語では文字を表すための変数としてchar型が用意されています。
このcharは文字型といわれますが、ASCIIの文字群を表すことができる型ということになります。
なので文字だけしか格納できないというわけではなく、範囲内であれば数値を格納することができます。
実際に文字を表す時にも文字コードという整数値がchar型に格納されているということになります。
以下のコードを実行してみてください。

#include <stdio.h>
int main(void){
	char c;
	c = 65;
	printf("%cn",c);
	return(0);
}

実行結果

A

コードを見てみましょう
char型には「-128~127」の値が格納できますので65を代入することは問題ありません。
printf文の書式指定子で「%c」を指定することで文字として、引数の変数が表示されます。
格納したのは65ですが表示されているのは大文字の「A」です。
ASCIIの文字コードはアルファベットのAに65という値が割り当てられているので文字としては「A」という扱いに
なり、表示のようになります。

■文字の代入
文字を代入する際にコードも数値ではなく、シングルクォーテーションで文字を囲む場合もあります。
次のコードを実行してみてください。

#include <stdio.h>
int main(void){
	char c;
	c = ‘A’;
	printf("%cn",c);
	return(0);
}

実行結果

A

先ほどの例を見てみましょう。
前のソースコードでは「65」という文字コードを直接char型変数に代入していましたが、
今回は「’A’」を代入しています。シングルクォーテーションで囲った場合、アスキーコードを表しています。
そのため65を入力しているのと同じことになります。
ただし一文字でしかシングルクォーテーションは使用できません。

■文字列

C言語では文字を表すための変数としてchar型が用意されていますが、文字列を表すものは
ありません。そこで文字列は文字(文字コード)の集合ということでchar型の配列を使用して表します。
例えば4個の文字を格納する配列を宣言するなら以下のようになります。

char str[5];

このとき注意しなければならないこととして、文字列を格納する際は1文字分余計に確保する必要があるという
ことです。(実際はぎりぎりよりも少し多めに確保することがあります)
そもそも文字列を表す型の存在しないC言語では、文字列の最後がわかりません。
前にも述べたように用意した要素数を超えた場所を間違えて指定しても、コンパイルエラーとはならず他の領域に
影響が出る可能性があるだけです。要素数5としても5個分の領域が確保されるだけで、そこが切れ目とは
ならないわけです。
そのためどこまでが文字列(文字コードの並び)なのかを表す必要があるため、文字コードで
使用していない「」を使用することになっています。この「」を終端文字といいます。
この終端文字を含めた長さの文だけ配列を用意する必要があります。
例えば「test」という文字を格納したい場合は以下のようになっていなければなりません。
c15-1

文字列自体は4文字ですが終端文字の「」が必要であるため配列は5つ分の領域を確保しなければなりません。

実際に文字列を格納するにはいかように行います。ダブルクォーテーションで囲むことで文字リテラルとして
扱われます。リテラルというのはコード内に直接書かれた数値や文字などの定数のことをいいます。

char star[5]="test";

終端文字は自動的に最後につくようになっています。

コードで確認

コードで確認してみましょう。

#include <stdio.h>
int main(void){
	char str[12] = "Hello World";
	printf("%sn",str);
	return(0);
}

表示結果

Hello World

要素数12のchar型配列を作成し、そこに「Hello World」を格納しています。
c15-2

空白込みで11文字ですが
終端文字が入るため、要素数は12としています。
printf文で書式指定子「%s」を使用することでstrが文字列として表示されます。

少しコードを変えてみましょう。

#include <stdio.h>
int main(void){
	char str[12] = "Hello&#092;&#048;World";
	printf("%sn",str);
	return(0);
}

表示結果

Hello
[Hello」と「World」の間に「」を入れています。そのため文字列としては「Hello」までで1つの文字列と
扱われます。そのためprintf文で表示されるのは「Hello」までとなります。
c15-3-2

文字列の際にやってはダメな例も見てみましょう。

#include <stdio.h>
int main(void){
	char str[11] = “Hello World";
	printf("%sn",str);
	return(0);
}

表示結果

Hello Worldフフフフフ剽スヨ

配列を宣言する際に、要素数をちょうど文字の数しか確保しなかった場合、終端文字の入る部分がないため
文字列の終わりが不明となります。表示結果を見ても意味不明な文字が後ろに続く形となってしまいます。
このように用意する配列は実際に格納することを想定している文字数よりも多めに確保しなければなりません。
c15-4

実践力が身につくC言語講座 連載リンク

競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載

アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載

パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載

Recent News

Recent Tips

Tag Search