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

问题描述:

如果我需要空字符串终止,我应该宁愿使用\0还是简单的0也足够了?空终止字符串:使用' 0'还是只有0?

是否有使用

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

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

或者是\0只是最好说清楚,我是空的结束位置之间的任何差别,但对于编译器它是相同?

+6

对于C++,只需使用'std :: string'并忘记C字符串。 – crashmstr

使用'\ 0'或只是0?

价值没有差异。
在C中,类型没有区别:都是int
在C++中它们有不同的类型:charint。所以边缘去'\0'因为没有涉及类型转换。

不同风格指南推动一个在另一个。为清晰起见,请参阅'\0'0缺乏杂乱。

正确答案:根据您的团队编码标准/指导原则使用样式。如果你的团队没有这样的指导方针,那就制作一个。更好地使用一个比有不同的风格。

'\0'0完全一样,尽管类型。 '\0'只是表示为char文字。虽然类型char可以从普通文字int初始化。

所以实际上不可能说出哪些更好,只要记住在代码中一致地使用它。

+0

详细信息:在C中,“\ 0”更适合称为_character constant_。只有文字C指定的是_string literal_和_compound literal_。 – chux

+3

注意:在C中,像''\ 0''这样的字符常量的类型是'int',而不是'char'。 –

这是一回事。看看ascii表。

从我的角度来看,使用'\ 0'会更好,因为您明确指出字符串的结尾。

这有助于当你读你的代码(如使用空指针而不是0)。

+2

_“看看ascii表。”_ EBCDIC字符表呢?这仍然是真的吗? –

'\0'是一个octal literal与0的值escape sequence所以有他们旁注之间

没有区别:如果你正在处理字符串比你应该使用std::string

两者都将产生相同的机器代码,如0将被转换为字符值0,和'\0'是书写字符值0的另一种方式。后者显然是一个角色,所以它会表明你并不意味着写'0',但除此之外,它最终是完全一样的东西。

+2

注意:在C中,像''\ 0''这样的字符常量的类型是'int',而不是'char'。 –