ストリング・リテラル

ストリング・リテラル には、 二重引用符で囲まれた連続した文字またはエスケープ・シーケンスが含まれます。

             .---------------------.
             V                     |
>>-+---+--"----+-文字------------+-+--"------------------------><
   '-L-'       '-escape_sequence-'
 
 

基本ソース文字集合外の文字の汎用文字名を使用できます。

接頭部 L のあるストリング・リテラルは、ワイド・ストリング・リテラル です。 接頭部 L のないストリング・リテラルは、通常の、すなわち狭幅ストリング・リテラル です。

C 狭幅ストリング・リテラルの型は、char 型の配列で、 ワイド・ストリング・リテラルの型は、wchar_t 型の配列です。

C++狭幅ストリング・リテラルの型は const char の配列で、 ワイド・ストリング・リテラルの型は const wchar_t の配列です。両方の型には、静的ストレージ期間が指定されています。

ストリング・リテラルの例を次に示します。

char titles[ ] = "Handel's ¥"Water Music¥"";
char *mail_addr = "Last Name    First Name    MI   Street Address ¥
   City     Province   Postal code ";
char *temp_string = "abc" "def" "ghi";  /* *temp_string = "abcdefghi¥0" */
wchar_t *wide_string = L"longstring";

ヌル ('¥0') 文字が、各ストリングに付加されました。 ワイド・ストリング・リテラルに対して、型 wchar_t の値 '¥0' が付加されます。 規則によって、プログラムでは、ヌル文字が検出されると、ストリングの最後と認識されます。

ストリング・リテラル内に含まれている複数のスペースは保存されます。

次の行にストリングを継続するには、 行継続文字 (¥ 記号) と、その後に続く オプションの空白および改行文字 (必要) を使用します。次の例では、ストリング・リテラル second が、コンパイル時のエラーを起こします。

char *first = "This string continues onto the next¥
  line, where it ends.";                /* compiles successfully.   */
char *second = "The comment makes the ¥ /* continuation symbol      */
  invisible to the compiler.";          /* compilation error.       */

連結

ストリングを継続する別の方法は、複数の連続ストリングを持つことです。 隣接するストリング・リテラルを連結し、単一のストリングを作成します。 ワイド・ストリング・リテラルと狭幅ストリング・リテラルが相互に隣接する場合、 その結果の振る舞いについては未定義です。 次の例は、このことを示しています。

"hello " "there"     /* is equivalent to "hello there"                      */
"hello " L"there"    /* the behavior at the C89 language level is undefined */
"hello" "there"      /* is equivalent to "hellothere"                       */

連結されたストリングの文字は、別個のまま残っています。 例えば、ストリング "¥xab" と "3" は、連結されて "¥xab3" を形成します。 しかし、文字 ¥xab および 3 は、別個のまま残っていて、16 進文字 ¥xab3 を形成するためにマージされることはありません。

C

ワイド・ストリング・リテラルと狭幅ストリング・リテラルが隣接すると、 その結果はワイド・ストリング・リテラルになります。

連結の後で、各ストリングの終わりに、char 型の '¥0' が付加されます。 C++ プログラムは、この値をスキャンすることによって、ストリング の終わりを検出します。ワイド・ストリング・リテラルに対して、 wchar_t'¥0' が付加されます。 次に例を示します。

char *first = "Hello ";            /* stored as "Hello ¥0"       */
char *second = "there";            /* stored as "there¥0"        */
char *third = "Hello " "there";    /* stored as "Hello there¥0"  */

関連参照

IBM Copyright 2003