文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
使用 scanf() 时要小心
scanf() 函数有一个小毛病。到目前为止,你写过的所有代码都小心翼翼地限制了 scanf() 能读入的字符数:scanf("%39s", name);scanf("%2s", card_name);
为什么要这样做?毕竟 scanf() 用了和 printf() 一样的格式串,但当我们用 printf() 打印字符串时,只用了%s 。如果在 scanf() 中只用%s ,一旦用户输入得太起劲,就会出问题:char food[5];printf("Enter favorite food: ");scanf("%s", food);printf("Favorite food: %s\n", food);
程序崩溃了,因为 scanf() 在写数据时越过了 food 数组的尾部。
scanf() 会导致缓冲区溢出
如果忘了限制 scanf() 读取字符串的长度,用户就可以输入远远超出程序空间的数据,多余的数据会写到计算机还没有分配好的存储器中。如果运气好,数据不但能保存,而且不会有任何问题。
但缓冲区溢出很有可能会导致程序出错,这种情况通常被称为段错误或 abort trap,不管出现什么错误消息,程序都会崩溃。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论