-1

私は初心者です。どうしてか分かりません?Code::Blocks を使用しています。次のコードを読んでください。


ここに画像の説明を入力
ここに画像の説明を入力
ここに画像の説明を入力
ここに画像の説明を入力



q= ' W ' の場合、 Wを出力します。
q= " W "の場合、 $を出力します。

4

3 に答える 3

4

リテラル"W"は単一ではなく、とcharで構成されるnullで終了する文字列です。'W''\0'

に割り当ててconst char*それを印刷することにより、目的の動作を取得する1つの方法%s

const char* q = "W";
printf("%s", q);

コメントで指摘されているように、コンパイラの警告レベルを上げることで、このタイプのエラーをキャッチできます。

于 2012-10-17T06:35:40.070 に答える
4

声明

char q = "W";

文字列リテラル のアドレスを取り、アドレスの値を に"W"キャストします。つまり、アドレスの最下位バイトが に割り当てられます。charc

あなたの場合、 のアドレスは"W"例えば0x12345624である可能性があり、それは にキャストされ0x24ます'$'

于 2012-10-17T06:40:38.080 に答える
2
char q = "W";

警告レベルをオンにすると、コンパイラはこれについて文句を言うはずです。'W'は文字ではなく、文字列リテラルであり、型は char[2] ('W' と '\0' の 2 つの文字の配列) です。最初の文字へのポインターに減衰し、次のように変換されます。char、たまたま「$」のASCII値に変換されます。

文字列リテラルを出力するための正しい書式指定子は%s.

于 2012-10-17T06:36:06.787 に答える