C 关于字符数组的长度

字符数组如果写成字符串的形式,数组的长度是原来的长度+1,为什么定义成原来的长度不会出错?如:char c[5]={"china"}; 这样如果逐个输出还可以正确输出;
朋友们帮着分析下,最好解释详细点吧,谢谢!
但是 char c[5]={"china"}相当于char c[5]={'c','h','i','n','a','\0'}; 这样的话就是六个字符,虽然输出的时候没使用最后一个字符,而定义时只定义了五个,这个不是定义就有错误吗?为什么不是下标越界?
+1是毁燃核‘\0’代表字符串结束,逐个字符输出当然不会出错,因为使用下标不需要使用结束标志。
如果像下面这样就会出错了,原因在于没有字符结束标志纤掘段举。
#include "stdio.h"
void main(void)
{
char a[5]="hello";
printf("%s\n",a);
}