首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单C程序中的缓冲区溢出

简单C程序中的缓冲区溢出
EN

Stack Overflow用户
提问于 2019-10-02 10:20:58
回答 1查看 67关注 0票数 0

我写了一个C程序,它检查是否输入了某个密码,如果密码正确,则返回一个名为Secret的文件(至少这是它应该做的)。在测试过程中,我发现当输入数字1 (111111111111111)的15倍时,它的行为并不像预期的那样,文件Secret甚至会显示出来,这不是存储在文件中的密码。

我添加了sanitize方法,它删除了所有非字母字符,但显然这并没有修复它。

我真的不明白为什么会发生溢出,以及哪些变量(和它们的内存)会受到影响。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 10:30:16

C中的字符串的最后一个字符必须为'\0‘(空终止符)。这意味着,当您像这样进行分配时:

代码语言:javascript
复制
char pass[15];

您确实分配了14个字符,1个字符用于空终止符。

strcpy的工作原理就是这样。如果你的字符串没有终止符,你会得到一个缓冲区溢出。

查看15个1的密码,很明显,您没有留出空格来放置空终止符

要避免这种情况,请开始使用strncpy函数及其系列

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58194423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档