对于字符数组后面是否要加‘\0’,有以下几种情况:
第一种: char str[10] = {'h','e','l','l','o'};
如果大括号中的字符个数小于字符数组的长度,则把大括号中的字符赋给数组中前面的元素,其余元素自动赋值为空字符(即‘\0’)。
第二种:char str[5] = {'h','e','l','l','o'};
对于大括号中的字符个数和数组长度相同,系统不会自动添加'\0'。对于这种赋值方式,需要手动添加‘\0’;
即:char str[6] = {'h','e','l','l','o', '\0'};
第三种:char str[] = "hello";
系统会自动在后面添加‘\0’;
对于字符串,系统会自动在其后面加‘\0’,因此 const char str[5] = "hello",在VS环境下会提示错误:const char[6] 不能赋值给 const char[5],但是在GCC不报错;建议最好不要这样写,以及对字符串定义时采用第三种方式,或者使用 char *str = "hello";
分析:strlen 是以‘\0’为结束依据,因此会出现19 和21;使用sizeof()会将‘\0’也当做一个字符并计入结果,而strlen()不会计入‘\0’。
其中在C语言中,字符串是用字符数组来存储的。
注意:在实际编程中,在定义字符数组时应估计实际字符串的长度,保证数组长度始终大于字符串的长度。