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'与数字不同00您正在第二对s中打印整数,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'。

其中前两个是相同的。它们只代表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

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

于 2012-07-02T13:39:45.033 回答
0

你的最后一行应该是

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