我写了一个C程序,它检查是否输入了某个密码,如果密码正确,则返回一个名为Secret的文件(至少这是它应该做的)。在测试过程中,我发现当输入数字1 (111111111111111)的15倍时,它的行为并不像预期的那样,文件Secret甚至会显示出来,这不是存储在文件中的密码。
我添加了sanitize方法,它删除了所有非字母字符,但显然这并没有修复它。
我真的不明白为什么会发生溢出,以及哪些变量(和它们的内存)会受到影响。
发布于 2019-10-02 10:30:16
C中的字符串的最后一个字符必须为'\0‘(空终止符)。这意味着,当您像这样进行分配时:
char pass[15];您确实分配了14个字符,1个字符用于空终止符。
strcpy的工作原理就是这样。如果你的字符串没有终止符,你会得到一个缓冲区溢出。
查看15个1的密码,很明显,您没有留出空格来放置空终止符
要避免这种情况,请开始使用strncpy函数及其系列
https://stackoverflow.com/questions/58194423
复制相似问题