'\ 0'的ASCII值与ASCII值0相同?

时间:2012-07-02 13:37:25

标签: c

我知道'\ 0'的ASCII值是0,而ASCII值0是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

为什么?

7 个答案:

答案 0 :(得分:11)

ASCII字符'0'与数字0不同。您要在第二对0而不是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');

此外,您不需要在字符串内转义'。也就是说,"'"很好,您不需要写"\'"

答案 1 :(得分:5)

你混淆0,'\ 0'和'0'。

前两个是相同的;它们只代表值{0}的int

然而,

'0'是不同的,代表int,其值为'0',即48

答案 2 :(得分:3)

是的,字符文字'\0'的值为0,这与字符集无关。

  

(K& R2,2.3)“字符常量'\ 0'表示值为零的字符,空字符。'\ 0'经常被写入而不是0来强调某些表达式的字符性质,但是数值只是0.“

答案 3 :(得分:1)

所有这些答案似乎都忽略了\0 ......

试试这个:

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

这就是\0

的原因

所以你可以定义一个以NULL结尾的字符串......

#define TEST_STRING "Test"

完全不同
#define TEST_STRING "Test\0"

后者在某些情况下很有用。

答案 4 :(得分:0)

'\ 0'的ASCII值确实是0.但是'\ 0'与'0'不同(注意反斜杠,它是转义符号)。

答案 5 :(得分:0)

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

像这样打印,你会得到48。

答案 6 :(得分:0)

你的最后一行应该是

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