用于字符串比较的以下程序中的分段错误

时间:2017-03-30 06:23:28

标签: c string pointers buffer-overflow strcmp

我正在为以下代码获取分段错误。该程序的逻辑应该接受正确的密码("abcd"),如果输入任何其他密码,它应该拒绝访问,但是在输入错误的密码后我仍然遇到分段错误(例如:{{1} }或"acdc"。。我得到了"ancgff""abc"等密码的正确回复,我收到了“拒绝访问”消息。

请帮助我,无法理解为什么会收到此错误?

"xyz"

1 个答案:

答案 0 :(得分:3)

您定义

char pin_buf[4];

预先确定的大小为4,然后在没有任何检查的情况下使用

 strcpy(pin_buf,pin);

pin有超过3个元素(以及终止空值)的那一刻,你将超越分配内存的边界,同时尝试复制导致undefined behavior的内容。

这就是为什么,你观察

  

" ...我输入错误的密码后仍然出现分段错误(例如:"acdc""ancgff")。我得到了{{{{{{ 1}}或"abc""

那就是说,你根本不需要"xyz"。您打算执行的操作可以使用pin_buf本身完成。