以字符串字面量(配对的双引号之间的字符串)来表示字符串时,字面量本身末尾隐含了'\0'。用字符串字面量来声明一个字符指针或数组时,最后会以'\0'结尾,因此是有效的字符串。
此外,自动变量只要在声明同时初始化,且初始化部分没有完全填满声明的空间时,剩余部分都会被填充0。由于(char)0等于'\0',对于char数组而言,会以一连串的'\0'结尾,其中第一个'\0'和之前的部分就是一个有效的字符串。静态/全局变量定义同时如果没有显式初始化,则会自动初始化,同样是填充0的方式。
至于scanf、gets等以字符串方式读输入流的函数,都会在末尾自动添加'\0'以保证读入的字符串有效。不过这体现的是运行期赋值语义,和编译期确定的初始化无关。
====
[原创回答团]
每个字符串的后面都会自动加上 结束符
可以参考
http://book.51cto.com/art/200911/164177.htm
c语言中的字符串是按数组来处理的,当你输入一个字符串的敲回车的时候就自动给字符串增加了一个‘\0'结束标记。