用0而不是'\ 0'终止一个c-string是错误的?

时间:2010-02-13 13:01:14

标签: c string

C字符串以空值终止,这意味着在char数组中,索引strlen()处的字符是一个字节,所有位都设置为0.我看到代码在哪里,而不是{{1 },使用整数'\0'。但是从0开始,这可能实际上超出了阵列的分配空间 - 我错了吗?或者编译器在这种情况下是否隐含地将sizeof(int) > sizeof(char)投射到int

2 个答案:

答案 0 :(得分:13)

将值0存储在char的数组中时,int将被隐式转换为char。

实际上,'\0'的类型为int(与人们的期望相反),因此somechararray[x]=0somechararray[x]='\0'在语义上是等效的。

就个人而言,我更愿意选择'\0',以便更明确地说我正在处理字符串。

答案 1 :(得分:10)

是的,你错了 - 零值将被截断。毕竟,如果你写:

char c = 0;

我希望你不会指望编译器超出变量c的界限。如果你写这样的东西:

char c = 12345;

然后编译器应警告您截断。 GCC产生:

c.c:2: warning: overflow in implicit constant conversion

但仍然没有任何东西会超出变量的范围。