5

私が次のようなことをしたとしたら:

printf("The string is: %s\n", "string1");

コンパイル時に次のことを行いますか:

printf("The string is: %s\n", (unsigned char*) "string1"); 

または類似?

4

2 に答える 2

12

char文字列リテラルの型は1の配列であり、配列は自動的にポインターに減衰することが標準で定義されていますchar*。指定子が使用されているprintfときに引数として渡すときに、明示的にキャストする必要はありません。%s

補足: C++ ではconst char*2です。


[1] C99 6.4.5: 「文字列リテラルは、"xyz" のように、二重引用符で囲まれた 0 個以上のマルチバイト文字のシーケンスです...シーケンスを格納するのにちょうど十分な静的ストレージ期間と長さの配列. 文字列リテラルの場合、配列要素の型はchar"

[2] C++03 2.13.4 §1: 「通常の文字列リテラルは、「n の配列」型 const charと静的記憶域期間を持ちます」

于 2013-10-09T16:30:17.283 に答える