在C语言中,将字符串作为字符数组来处理,例如定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个字符串结束标志,以字符 '\0' 代表,如果有一个字符串,其中第10个字符为 '\0' 则此字符串的有 效字符为9个,也就是说,在遇到字符 '\0' 时,表示字符串结束,由它前面的字符组成字符串。

  系统对字符串常量也自动加一个 '\0' 作为结束符,例如 "C Program" 共有9个字符,但在内在中占10个字节,最后一个字节 '\0' 是由系统自动加的,字符串作为一维数组存放在内存中。

  有了结束标志 '\0' 后,字符数组的长度就显示不那么重要了,在程序中往往依靠检测 '\0' 的位置来判断字符串是否结束,而不是根据数组的长度来决定字符串的长度,当然在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度,如果在一个字符数组中先后存放多个不同 长度的字符串,则应使数组长度大于最长的字符串的长度。

  对字符数组初始化的方法补充一种方法,可以用字符串常量来使字符数组初始化。

如:char c[] = {"I am happy"};

也可以省略花括号直接写成

char c[] = "I am happy";

  不是用单个字符作为初值,而是用一个字符串作为初值,显然这种方法直观,方便,符合人们的习惯,数组c 的长度不是10而是11,这点要注意,因为字符串常量的最后由系统加上一个 '\0' 因此上面的初始化与下的初始化等价。

char c[] = {'I', ' ', 'a','m', ' ', 'h', 'a', 'p', 'p', 'y', '\0'};

而不与下面的等价

char c[] = {'I', ' ', 'a','m', ' ', 'h', 'a', 'p', 'p', 'y'};

如果有

char c[10] = {"China"};

数组c 的前5个元素为 'C','h','i','n','a' 第6个元素为 '\0' 后4个元素为空字符

C h i n a \0 \0 \0 \0 \0

说明,字符数组并不是要求它的最后一个字符为 '\0' ,甚至可以不包含 '\0' 像下面的写法完全是合法的

char c[5] = {'C', 'h', 'i', 'n', 'a'};

是否需要加 '\0' 完全根据需要决定,但是由于系统对字符串常量自动加一个 '\0' 因此人们为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组也常常人为加上一个 '\0' 如

char c[6] = {'C', 'h', 'i', 'n', 'a', '\0'}