关于C语言中'\0'结束符的探讨

来源:互联网 发布:手机淘宝删除不了评价 编辑:程序博客网 时间:2024/06/05 04:05
        学过C语言的都知道,在处理char型字符数组或字符串数组时会有一个'\0'结束符的概念,这个符号标识数组是否结束,当我们给字符数组传值时如果未加上'\0'则编译器将自动为我们加上'\0'结束符,当然如果自己添加也可以,不过如果是在字符数组中间部分添加上'\0',则会出现问题。考虑下列代码:
int main(){    int i = 0;    char a[] = {'5', '\0', '6', '6'};    for(; i < 4; i ++)        printf("%c ", a[i]);}

执行结果可能视编译器而定,笔者使用VS2010 VC++板块调试时结果输出正常,不过'\0'被编译器理解为空字符,即输出为5 66。'\0'结束符和NULL空字符一样,实际上的ASCII码值均为0,而其他数据类型的数组则没有结束符的概念。一般不建议自己添加'\0',除非程序的需要,否则由于ASCII码的不可分辨,编译器很可能将结束符解析为一个特殊的ASCII码值,这样便会发生问题,比如上面的例子,我们实际上意思是不想访问后面的数据,但是如果由于编译器问题而使得可访问,则会影响程序的稳定性和出现不可预料结果。在调用str类库函数,比如strcp等,如果不存在结束符,系统也会默认添加上。千万要注意的是,其他数据类型,比如int数组,是不存在结束符的概念哦!如果在int数组中直接使用'\0'的话,那么它会像其他字符一样,转换为ASCII码值,然后以int型存储。那如果我想定义一个单纯的"\0"这样的字符串呢?很简单,和其他转义字符一样,只需要这样"\\0"便可以实现。实际上,便可以理解为'\0'是一个转义字符,而它是为了标识结束概念的,就和NULL标识数据为空一样,NULL也是用#define NULL 0的方式定义的,它们都是为了程序的需要而存在的特殊字符。