C字符串以空值终止,这意味着在char数组中,索引strlen()
处的char 是一个字节,所有位都设置为0.我已经看到代码,而不是使用'\0'
整数0
.但是,因为sizeof(int) > sizeof(char)
这可能实际上超出了阵列的分配空间 - 我错了吗?或者编译器int
是否char
在这种情况下隐含地投了一个?
Han*_*s W 13
将值存储在s 0
数组中时char
,int将隐式转换为char.
事实上,类型'\0'
是int
(相反的是人们可以预期),所以somechararray[x]=0
和somechararray[x]='\0'
语义等价.
就我个人而言,我更愿意接受'\0'
,以便更明确地说我正在处理字符串.
小智 10
是的,你错了 - 零值将被截断.毕竟,如果你写:
char c = 0;
Run Code Online (Sandbox Code Playgroud)
你希望编译器不要超出变量c的界限.如果你写这样的东西:
char c = 12345;
Run Code Online (Sandbox Code Playgroud)
那么编译器应该警告你截断.GCC生产:
c.c:2: warning: overflow in implicit constant conversion
Run Code Online (Sandbox Code Playgroud)
但仍然没有任何东西会超出变量的范围.