6

'\ 0'のASCII値が0で、0のASCII値が0x30であることを学びましたが、printfを使用してASCII値を印刷しようとすると、同じ出力が得られます。

printf("\'\\0\' : %d\n", '\0');
printf("\'\\0\' in hex : %x\n", '\0');
printf("0 : %d\n", 0);
printf("0 in hex: %x\n", 0);

出力:

'\0' : 0
'\0' in hex : 0
0 : 0
0 in hex: 0

なぜ?

4

7 に答える 7

15

ASCII文字'0'は数字とは異なり0ます。の代わりにsの02番目のペアに整数を出力しています。printf'0'

これを試して:

printf("'\\0' : %d\n", '\0');
printf("'\\0' in hex : %x\n", '\0');
printf("'0' : %d\n", '0');
printf("'0' in hex: %x\n", '0');

また、文字列内でエスケープする必要はありません'。つまり、"'"問題なく、書く必要はありません"\'"

于 2012-07-02T13:40:20.590 に答える
11

0、'\ 0'、および'0'を混同します。

これらの最初の2つは同じものです。intそれらは値0のを表すだけです。

ただし、「0」は異なり、int「0」文字の値であるを表し48ます。

于 2012-07-02T13:40:57.167 に答える
3

はい、文字リテラル'\0'には値が0あり、これは文字セットに依存しません。

(K&R2、2.3)「文字定数「\ 0」は、値がゼロの文字、つまりヌル文字を表します。式の文字の性質を強調するために、0の代わりに「\ 0」と書かれることがよくありますが、数値は0です。 。」

于 2012-07-02T14:14:46.683 に答える
2
printf("0 : %d\n", '0');

このように印刷すると、48が得られます。

于 2012-07-02T13:41:44.730 に答える
1

これらの答えはすべて、\0...の要点を見逃しているようです。

これを試して:

printf("This line\0 might not completely appear");

それが理由です\0

したがって、NULLで終了する文字列を定義できます...

#define TEST_STRING "Test"

とはかなり異なります

#define TEST_STRING "Test\0"

後者は特定の場合に役立ちます。

于 2016-06-02T22:11:05.493 に答える
0

あなたの最後の行は

printf("0 in hex: %x\n", '0');
于 2012-07-02T13:41:51.953 に答える
0

'\ 0'のASCII値は確かに0です。ただし、'\0'は'0'とは異なります(エスケープ記号である円記号に注意してください)。

于 2012-07-02T13:39:45.033 に答える