c语言字符数组溢出不报错

#include <stdio.h>
void f(void){
    char a[8];
    char b[8];
    scanf("%s",a);
    scanf("%s",b);
    printf("%s##%s##\n",a,b);
} 
int main(void){
    f();
    return 0;
} 

初学c语言
代码如上,我定义了了两个长度为8的字符数组。但是当我输入长度超过8的字符时,为什么依然可以正常输出。
例如我输入"123123123 123123123",pirntf出来就是"123123123##123123123##",指定的位数没有效果。
请前辈指教。

阅读 3k
1 个回答

因为c语言本身是没有数组溢出检查的,scanf并不知道你定义的数组是多大,对f函数来说,只要不超过给它分配的栈大小就不会报错。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进