用0而不是'终止c字符串是否错误\0';?
C字符串以null结尾,这意味着在字符数组中,索引用0而不是'终止c字符串是否错误\0';?,c,string,C,String,C字符串以null结尾,这意味着在字符数组中,索引strlen()处的字符是一个所有位都设置为0的字节。我见过这样的代码,其中使用的不是'\0',而是整数0。但是由于sizeof(int)>sizeof(char),这实际上可能会超出为数组分配的空间-我错了吗?或者在这种情况下,编译器是否将int隐式转换为char?是的,您错了-零值将被截断。毕竟,如果你写: char c = 0; 我希望,您不会期望编译器编写的代码超出变量c的界限。如果你这样写: char c = 12345; 然后编译
strlen()
处的字符是一个所有位都设置为0的字节。我见过这样的代码,其中使用的不是'\0'
,而是整数0
。但是由于sizeof(int)>sizeof(char)
,这实际上可能会超出为数组分配的空间-我错了吗?或者在这种情况下,编译器是否将int
隐式转换为char
?是的,您错了-零值将被截断。毕竟,如果你写:
char c = 0;
我希望,您不会期望编译器编写的代码超出变量c的界限。如果你这样写:
char c = 12345;
然后编译器应该警告您截断。GCC生产:
c.c:2: warning: overflow in implicit constant conversion
但仍然不会写入超出变量边界的内容。将值
0
存储在char
s数组中时,int将隐式转换为char
实际上,'\0'
的类型是int
(与人们所期望的相反),因此somechararray[x]=0
和somechararray[x]='\0'
在语义上是等价的
就我个人而言,我更喜欢使用'\0'
,以便更清楚地表明我在处理字符串