私は初心者です。どうしてか分かりません?Code::Blocks を使用しています。次のコードを読んでください。
q= ' W ' の場合、 Wを出力します。
q= " W "の場合、 $を出力します。
私は初心者です。どうしてか分かりません?Code::Blocks を使用しています。次のコードを読んでください。
q= ' W ' の場合、 Wを出力します。
q= " W "の場合、 $を出力します。
リテラル"W"
は単一ではなく、とchar
で構成されるnullで終了する文字列です。'W'
'\0'
に割り当ててconst char*
それを印刷することにより、目的の動作を取得する1つの方法%s
const char* q = "W";
printf("%s", q);
コメントで指摘されているように、コンパイラの警告レベルを上げることで、このタイプのエラーをキャッチできます。
声明
char q = "W";
文字列リテラル のアドレスを取り、アドレスの値を に"W"
キャストします。つまり、アドレスの最下位バイトが に割り当てられます。char
c
あなたの場合、 のアドレスは"W"
例えば0x12345624
である可能性があり、それは にキャストされ0x24
ます'$'
。
char q = "W";
警告レベルをオンにすると、コンパイラはこれについて文句を言うはずです。'W'
は文字ではなく、文字列リテラルであり、型は char[2] ('W' と '\0' の 2 つの文字の配列) です。最初の文字へのポインターに減衰し、次のように変換されます。char
、たまたま「$」のASCII値に変換されます。
文字列リテラルを出力するための正しい書式指定子は%s
.