'\0'的ASCII值和0的ASCII值相同吗?

7

我了解到'\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
为什么?

这是一个“NULL”字节,与零相同。 - Evan Mulawski
1
@EvanMulawski,'\0'实际上是NULNULL是一个指针。(虽然在C语言中没有区别,但从概念上讲它们是不同的) - Shahbaz
@Shahbaz:哎呀,我不小心多按了一次“L”。你是正确的。 - Evan Mulawski
7个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
15

ASCII字符'0'与数字0不同。您在第二个printf对中打印了整数0,而不是'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');

此外,在字符串内部不需要转义 '。也就是说,"'" 是可以的,您不需要写成 "\'"


13

你把 0、'\0' 和 '0' 混淆了。

前两者其实是同一个东西,它们表示的是值为 0 的 int 类型。

但是 '0' 是不同的,它代表的是一个有着字符值为 '0'(在 ASCII 表中对应的数字是 48)的 int 类型。


3

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

(K&R2, 2.3) "字符常量'\0'表示值为零的字符,即空字符。'\0'经常代替0以强调某些表达式的字符性质,但数字值仅为0。"


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

按照这样的方式打印,您将得到48。


1
所有这些答案似乎都没有抓住 \0 的要点... 试一下这个:
printf("This line\0 might not completely appear");
这就是为什么要使用\0。 因此,您可以定义一个以NULL结尾的字符串...
#define TEST_STRING "Test"

is quite different from

#define TEST_STRING "Test\0"
后者在某些情况下很有用。

2
"Test" 是一个以空字符结尾的字符串。 - M.M
你是正确的 - 可能是老年痴呆开始了... #define NAME_DESC "Dog\0一个四条腿的朋友" 将是一个更好的例子,使用 '\0' 来“隐藏”描述信息以避免标准函数连接第二个字符串(即描述信息)。我只是想表明它有用处。 - Dr Jeff

0

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


0

你的最后一行应该是

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,