Ton*_*hen 0 c arrays termination char string-literals
我在C中有一个简单的代码,看看三个相同的char数组是否都以'\0'
:
int main(){
char a[4] = "1234";
char b[4] = "1234";
char c[4] = "1234";
if(a[4] == '\0')
printf("a end with '\\0'\n");
if(b[4] == '\0')
printf("b end with '\\0'\n");
if(c[4] == '\0')
printf("c end with '\\0'\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但输出显示只有数组b以终结符结束'\0'
.这是为什么?我想所有的char数组都必须结束'\0'
.
输出:
b以'\ 0'结尾
主要问题是,对于定义为char a[4] = ....
(大小为4个元素)的数组,使用if (a[4] ....)
已经是一个一个并导致未定义的行为.
您想要检查a[3]
,因为这是最后一个有效元素.
那就是说,在你的情况下,你没有空间终止器!
强调C11
§6.7.9中的引用,
字符类型数组可以由字符串文字或UTF-8字符串文字初始化,可选地用大括号括起来.字符串文字的连续字节(如果有空间或数组大小未知,则包括终止空字符)初始化数组的元素.
所以,你需要
char a[ ] = "1234";
,数组大小由提供的初始化程序的长度(包括空终止符)自动确定.