空终止字符串:使用'\0'还是只用0?

13

如果我需要给一个字符串添加空字符结尾,我应该使用\0还是简单的0也足够了?

在使用中是否有任何区别?

char a[5];
a[0] = 0;

char a[5];
a[0] = '\0';

\0是用来明确表示我在这里使用了空字符来终止字符串,但对于编译器而言它是否有区别?


6
对于 C++,只需使用 std::string,不再使用 C 字符串。 - crashmstr
5个回答

15

10
使用 '\0' 还是 0?
在值方面没有区别。 在 C 中,类型也没有区别:两者都是 int。 在 C++ 中,它们有不同的类型:char 和 int。因此优先使用 '\0',因为没有涉及到类型转换。
不同的风格指南推荐一种而不是另一种。 '\0' 是为了减少歧义。 0 则是为了避免杂乱无章。
正确答案:根据您的团队编码标准/指南来选择样式。 如果您的组没有这样的指南,请制定一个。最好使用一个而不是产生不同的风格。

8

'\0'0完全相同,尽管类型不同。 '\0'只是作为char字面量的表示。虽然如此,char类型可以从普通的int字面量初始化。

因此,实际上无法确定哪种更好,只需记住在代码中始终保持一致即可。


在C语言中,'\0'更恰当地被称为“字符常量”。C语言只指定了“字符串字面值”和“复合字面值”这两种文字。 - chux - Reinstate Monica
3
注意:在C语言中,像'\0'这样的字符常量是int类型,而不是char类型。 - Spikatrix

6

两者将生成相同的机器码,因为0将被转换为字符值0,而'\0'只是另一种写字符值0的方式。后者显然是一个字符,所以它将表明你并没有意外地想要写'0',但除此之外,在最终结果上两者完全相同。


2
注意:在C语言中,像'\0'这样的字符常量的类型是int,而不是char - Spikatrix

1

这是同一件事。看ASCII表。

从我的角度来看,最好使用 '\0',因为你明确地表示字符串的结尾。

当你阅读代码时会有所帮助(就像使用NULL代替0一样)。


2
看看 ASCII 表。EBCDIC 字符表呢?那还是成立的吗? - πάντα ῥεῖ

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