私は初心者です。どうしてか分かりません?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"キャストします。つまり、アドレスの最下位バイトが に割り当てられます。charc
あなたの場合、 のアドレスは"W"例えば0x12345624である可能性があり、それは にキャストされ0x24ます'$'。
char q = "W";
警告レベルをオンにすると、コンパイラはこれについて文句を言うはずです。'W'は文字ではなく、文字列リテラルであり、型は char[2] ('W' と '\0' の 2 つの文字の配列) です。最初の文字へのポインターに減衰し、次のように変換されます。char、たまたま「$」のASCII値に変換されます。
文字列リテラルを出力するための正しい書式指定子は%s.