当前位置:C++技术网 > 资讯 > 编程常识:14 字符串结尾为什么要以\0结尾?

编程常识:14 字符串结尾为什么要以\0结尾?

更新时间:2015-07-14 18:14:57浏览次数:1+次

编程常识14:字符串结尾为什么要以\0结尾?


    在C/C++语言中,字符串是用字符数组来表示的。

    但是,字符数组中的内容,直接显示,则可能出现乱码。因为编译器解释字符串时,从数组的内容中,依次显示字符,为了正确表示字符的结束,使用'\0'空字符作为结束符,代表字符串的结束。当然这是一种默认处理方式而已。

    事实上,很多机制可以不必以空字符结束。比如可以以字符数指定字符结束的位置等等。而我们的编程语言这么规定了,必须以\0做为字符串的结尾标识。因此,编译器从数组的内存开始一直往后找,一直找到\0为止。也就是说,编译器其实会超过数组的长度找的,除非在数组内存范围内出现了\0 。如果你忘记了给字符数组的字符末尾添加\0,因此就经常看到“烫烫烫烫”这种字样。出现这个烫烫的原因就是编译器预先将未使用的这些内存填充了,用于检测越界的情况等。 

    而填充的是0xcc字节,这也是你查看变量内存时,发现变量内存其他未使用的内存为什么是cc的原因。

    而STL、MFC等工具库的字符串类,基本对字符数组封装了,他们有的不通过末尾的\0来检测,而是使用字符串长度来记录字符串的字符个数。最终也有对应的机制,让显示字符串时在末尾\0,只不过这些都不用程序员操心了。

    说这个的意思就是告诉你,字符串结尾用\0只是一个默认的机制,算是一个硬性规定。规定好后,编译器就好理解和执行了。而不表示所有字符串类型都用这种机制。比如win32的各种显示消息的函数,MessageBox等。这个可以自己去研究一下。