5-2 文字列リテラル

この記事は約3分で読めます。

文字列リテラルとは

ダブルクォーテーション””で囲まれた文字列のことを文字列リテラルと呼びました。この文字列リテラルはC言語では(const)char型の配列とみなされます。つまり、char型の配列をつかって文字列リテラルを表現することができます。文字列リテラルをそのまま配列にすると要素数が分からないので、文字列の一番最後にはヌル文字を挿入することが決まっています。プログラム中で一文字を表す時はシングルコーテーション”で囲みます。ダブルクォーテーションはchar配列型になるのに対してシングルクォーテーションはchar 型となります。ヌル文字は’\0’と表します。

#include <stdio.h>
int main(void){
	char str1[]={'q','w','e','r','t','y','\0'};
	char str2[]="Hello";
	printf("str1=%s\nstr2=%s\n",str1,str2);
	printf("str1の要素数:%d\n",sizeof str1/sizeof str1[0]);
	printf("str2の要素数:%d\n",sizeof str2/sizeof str2[0]);
	return 0;
}

実行結果

str1=qwerty
str2=Hello
str1の要素数:7
str2の要素数:6

str1と初期化するときは一文字ずつシングルクォーテーションで囲って指定しています。それに対して、str2はダブルコーテーションで直接文字列を指定しています。この時はヌル文字はつける必要がありません。自動で末尾に付与されます。printfで文字列を表示する時は変換指定子%sを使用します。sizeof演算子でそれぞれの配列の要素数を確認すると、文字数よりも一つ多くなっています。これはヌル文字によるものです。

文字列リテラルを二つに分けて記述する

文字列リテラルはプログラム中で定数と同じ扱いになるので二重引用符の中で改行してはいけません。文字列リテラルが長い場合二つに分ける方法があります。

文字列リテラルを2つに分ける場合は、2つの文字列リテラルの間に改行、スペース、タブのみが含まれる場合、コンパイル時に1つにまとめられます。

#include <stdio.h>
int main(void){
	char str[]="mojiretsu";
	puts(str);
	puts("非常に長い文字列は"
	"2つに分けると改行して表すことができます。");
	return 0;
}

実行結果

mojiretsu
非常に長い文字列は2つに分けると改行して表すことができます。

まとめ

プログラム中に登場するダブルコーテーションで囲まれた文字列は文字列リテラルといい、(const)char型の配列とみなされる。

単なる文字の配列だと要素数がわからないので、文字列リテラルの末尾には必ずヌル文字’\0’が付与される。

文字列リテラルの途中で改行することはできないから、改行する場合は2つに分ける。

コメント