c语言中输入内容大于定义数组却还能输出?

s1输入超过十个汉字或者字母,s2还是能正常输出,代码如下

#include<stdio.h>
int main()
{ int i=0; 
char s1[10],s2[10]; 
scanf("%s",s1); 
while(s1[i]!='\0'){ 
s2[i]=s1[i];
 i++; }
 s2[i]='\0';
 puts(s2); }

用的软件是cfree

img

c语言数组越界是不会报错误的,多于的字符会写入到数组分配空间之后的未知空间中,
虽然可以这样但不安全。因为这个内存空间可能会分配给其它变量,当这个变量的值改变时数组也就受到影响。

这是有可能的,只要后续的空间尚未分配给其他软件
越界不一定崩溃,崩溃的原因是越界操作的内存空间已经被使用。