Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用0而不是'终止c字符串是否错误\0';?_C_String - Fatal编程技术网

用0而不是'终止c字符串是否错误\0';?

用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; 然后编译

C字符串以null结尾,这意味着在字符数组中,索引
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'
,以便更清楚地表明我在处理字符串