1、本质

‘\0’是字符串结束标志,不计入串长,但要占内存空间。

‘\0’是一个ASCII控制字符,是转义字符。意思是告诉编译器,这不是字符0,而是空字符。空字符\0对应的二进制为0000 0000,而数字0的二进制为0011 0000。

2、说明

(1) 任何字符串之后都会自动加上’\0’,由C编译系统自动加上。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。

把一个字符串赋值给数组:char zf[]={“abcdef”};
实际上数组str1在内存中的实际存放情况为:
a b c d e f’\0′
把字符数组zf中的字符串拷贝到另一个字符数组中。字符串结束标志’\0’也一同拷贝。

(2)如果字符串末尾少了‘\0’转义字符,则其在输出时可能会出现乱码问题。

3、注意

(1)这个’\0’是占一个位置的,所以如果一个长度为10的字符串要放在一个字符串数组里面的话,这个字符串数组长度至少为11。

(2)当数组长度不够时,指定了数组长度且赋值的字符串(没有人工输入’\0’)长度大于等于数组长度,后面的信息会丢失。

如:

char zf[6]={“abcdef”};
由于字符组zf的长度为6,所以后面的信息会丢失,即’\0’丢失。

(3)如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失’\0’。

如:
char zf[]={‘a’,’b’,’d’,’d’,’e’,’f’};

4、用法

若要让数组以’\0’结束,则可

(1) 字符串赋值

char zf[]={“abcdef”};

(2)手动添加

char zf[]={”a’,’b’,’d’,’d’,’e’,’f’,’\0′};

(3) 数组长度大一点

char zf[7]={‘a’,’b’,’d’,’d’,’e’,’f’};