返回介绍

使用 scanf() 时要小心

发布于 2024-10-10 23:21:23 字数 991 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文