解决方法

wang_qiao_ying 2010-05-27 04:30:40
在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函数以及他们的变形时,一定要考虑溢出的问题。
...全文
52 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
周靖峰 2010-05-27
  • 打赏
  • 举报
回复
楼主果然很强大,连解决方法都有了,又学习了一回
其实楼主发帖的时候可以将两个帖子用一个帖子发出,这样学习的人就会更加明白了
yuanzhang198711 2010-05-27
  • 打赏
  • 举报
回复
说实话,我真的不怎么喜欢scanf,感觉怪怪的,用着不方便,而且看着不爽。
wade_2003 2010-05-27
  • 打赏
  • 举报
回复
恩,用的时候一定要注意,LZ总结的很好~~~~~~
Myth_cn 2010-05-27
  • 打赏
  • 举报
回复
不错,学写了.前几天遇到类似问题,放弃了使用scanf,改用fgets了
renbin5566 2010-05-27
  • 打赏
  • 举报
回复
路过。。。
ithiker 2010-05-27
  • 打赏
  • 举报
回复
up
还以为是问题,原来是科普
honemay 2010-05-27
  • 打赏
  • 举报
回复
你想问什么?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧