解决方法
在C中有一种方法可以限制越界。
Scanf附加格式附中有一项是域宽。可以限制输入字符的个数。
int main()
{
char mychar = 'a';
char ch[4]={0};
int i = 1;
printf("Input the char:");
scanf("%3s",ch); /*只接受输入的前3个字符*/
for(i = 0;i < 3;i++)
printf("%c ",ch[i]);
printf("mychar = %c\n",mychar);
return 0;
}
这样,scanf()将最多从用户那里接受3个字符,所以任凭怎么输入,mychar的值都不会被修改。
但是,但是多余的任何多余的字符都将保留在输入缓冲区中,并且可以被其它的scanf()所获取。造成下一个scanf函数执行时发生异常。此处不再举例。
如果这些函数的目标地址是一个固定大小的缓冲区, 函数的另外参数是由
用户以某种形式输入.就有可能造成固定缓冲区的溢出。所以我们在使用scanf函数,printf函数以及他们的变形时,一定要考虑溢出的问题。