书上说字符型数组char str[4]{"a","b","c""\0"}
必须结尾加\0才表示字符串,那如果char str[4]{"a","b","c"}表示字符串吗?
首先数组初始化不能这么赋初始值,“a”表示字符串,而非字符。
有如下两种初始化方式:
char str[4] = {'a', 'b', 'c', '\0'}; 注意是单引号
char str[4] = "abc"; 注意,这是可以自动补0结尾的。(如果此处数组长度为3,则引发越界)
至于你的问题,如果是定义成:
char str[4] = {'a', 'b', 'c'}; 这种形式理解为字符数组初始化,而非字符串。
是的,没有“\0”的话,会自动在末尾加上,但是定义的数组要有足够的空间。
char str[4]{"a","b","c"}表示字符串
这个是一个字符串,但是是一个很危险的字符串。
因为c语言作为一种早期低级的语言,它的数组非常原始,是无法确定长度的(也许你说可以用sizeof,那是编译器的魔法,放在函数里就不行了)
字符串如果没有\0,那么像printf、strcpy、strlen这样的函数,因为不知道字符串到哪里算结束,会沿着内存一直找下去,要么访问到非法的内存,要么输出一堆乱码。
不但你那么写是危险的,
char str[4] = "abc";
str[3] = 'd';
这么写也是一样。