我已经在Linux中编写了这个程序。我将字符数组大小分配给10.最多输入23个字符时,程序显示没有错误。但是在第24个字符上,它显示出分段错误。请告诉我为什么我们可以输入多余的字符。
#include <stdio.h>
void main ()
{
char a[10];
scanf("%s", &a);
printf("%s", a);
}
答案 0 :(得分:1)
首先从&
移除scanf
。与
scanf("%s", a);
char a[10]
仅在堆栈上分配10 char
的数组。现在当你越界时输入字符时,你会覆盖其他有用的东西,比如scanf
调用的堆栈帧。
C标准未定义此越界行为