私が次のようなことをしたとしたら:
printf("The string is: %s\n", "string1");
コンパイル時に次のことを行いますか:
printf("The string is: %s\n", (unsigned char*) "string1");
または類似?
私が次のようなことをしたとしたら:
printf("The string is: %s\n", "string1");
コンパイル時に次のことを行いますか:
printf("The string is: %s\n", (unsigned char*) "string1");
または類似?
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
と静的記憶域期間を持ちます」