如果我分配一个大小为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;
}
答案 0 :(得分:1)
这是未定义的行为,这意味着可能发生任何事情。在这种情况下,最有可能的情况要么按预期运行,要么因段错误或与内存访问相关的其他原因而崩溃。
是的,您需要为空终止符增加一个字节。