char数组是否为空终止符分配一个额外的空间?

时间:2019-06-15 11:30:47

标签: c arrays char

如果我分配一个大小为4的char数组,然后通过scanf输入4个字符。该程序有效,但是为什么呢? AFAIK,您需要为空终止符多留一个空格,对吗?如果我输入5个字符,它将开始显示一些错误:

*** stack smashing detected ***: <unknown> terminated
Aborted.
int main(int argc, char const *argv[])
{
    char buffer[4];
    scanf("%s", buffer);
    printf("%s %d", buffer, strlen(buffer));
    return 0;
}

1 个答案:

答案 0 :(得分:1)

这是未定义的行为,这意味着可能发生任何事情。在这种情况下,最有可能的情况要么按预期运行,要么因段错误或与内存访问相关的其他原因而崩溃。

是的,您需要为空终止符增加一个字节。