定义一个数组时,到底要不要给”\0"留个位置

定义一个数组时,到底要不要给”\0"留个位置

char string0[3] = { "abc" };//没有 \0 的位置,输出会越界

但是

#include 
int main(void) {
    char a[5];
    scanf("%s", a);
    printf("%s", a);
    return 0;
}

定义数组a的长度为5,输入“hello”的长度为5,结果能正常输出,输出“hello”
为什么不会出现上一个代码的问题呢?定义一个数组时,到底要不要给”\0"留个位置?请求帮忙解决一下,谢谢。

你如果相当字符串用,那当然要留出存储'\0'的位置。
定义数组a的长度为5,输入“hello”的长度为5,结果能正常输出,输出“hello”==第二段代码也是越界的!!!可能是运气好而已。越界的内存没有被占用