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

fer*_*nko 3 c string

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]=0somechararray[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)

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