文字列リテラル

これまで、printf()関数のパラメータとして渡していた二重引用符で囲んだ"aaa"というようなテキストを文字列リテラルと呼びます。文字列とは、その名の通り文字の列です。引用符で囲んだ文字型の定数は1文字しか表現できませんが、文字列は任意の長さのテキストです。定数は単純な値でしたが、文字列は連続した文字の値であり、単純な値ではありません。

文字列のような単純な値を列に並べたものを配列と呼びます。配列の詳細は別の回で詳しくご説明するので、この場では、文字列リテラルは文字データを列に並べたものだと考えてください。そのため、文字列から特定の文字を切り抜いたり、他の文字列と結合するには、ちょっとしたテクニックが必要になります。こうした方法も、配列について学習することで理解できます。

これまで使ってきたように、テキストを二重引用符 " で囲んで文字列を作ることができます。ただし、この方法では文字列の中で二重引用符を表現できません。このような、文字列の中で文字として表現できない特殊な文字は、エスケープ文字(拡張表記)と呼ばれる特殊な記法で補うことができます。二重引用符の他に、改行やタブなど、視覚的に表現できない特殊文字も含まれます。

エスケープ文字は、必ずバックスラッシュ \ から始まり、その後に記号や文字などがきます。これまでも使ってきた、最も代表的な文字が、改行を表す\nです。また、タブを表す\tも頻繁に使われるエスケープ文字でしょう。二重引用符を文字列内で表現するには\"を使います。

また、エスケープ文字に使われるバックスラッシュを表現するには\\を指定します。たとえば、文字列内でエスケープ文字\nを表示したい場合は\\nと表記することで正しく\nと表示されます。

サンプル06

#include <stdio.h>

int main(void) {
    printf("He said \"I have a dream\".\n");
    printf("改行は \\n、二重引用符は \\\"、バックスラッシュは \\\\\n");
    return 0;
}

実行結果

He said "I have a dream".
改行は \n、二重引用符は \"、バックスラッシュは \\

上記は、エスケープ文字を使って文字列内で二重引用符やバックスラッシュなどの特殊な記号を埋め込んでいます。\エスケープ文字 " が、文字列内で正しく " に変換されていることに注目してください。