我遇到以下代码的段错误。程序的逻辑是它应该接受正确的密码( "abcd"
)并且如果输入任何其他密码它应该拒绝访问,但是我输入错误的密码后仍然出现段错误(例如:"acdc"
或 "ancgff"
)。我得到正确的对 "abc"
或 "xyz"
等密码的响应,我收到“拒绝访问”消息。
请帮助我,无法理解为什么会出现此错误?
#include <stdio.h>
#include <string.h>
int check(char *password)
{
char pin_buffer[4];
int authority = 0;
strcpy(pin_buffer,password);
if(strcmp(pin_buffer,"abcd")==0)
authority=1;
return authority;
}
int main(int argc, char *argv[])
{
if(argc < 1)
{
printf(argv[0]);
exit(0);
}
if(check(argv[1]))
{
printf("access granted");
}
else
{
printf("access denied};
}
最佳答案
你来定义
char pin_buf[4];
使用预先确定的 4
大小,然后在不进行任何检查的情况下使用
strcpy(pin_buf,pin);
当 pin
有超过 3 个元素(和终止空值)时,您将在尝试复制时超出已分配内存的边界,这会导致 undefined behavior .
这就是为什么,你观察
"...I am still getting a segmentation fault after I enter wrong password (eg:
"acdc"
or"ancgff"
).I get proper response for passwords like"abc"
or"xyz"
"
就是说,您根本不需要 pin_buf
。您打算执行的操作可以通过 pin
本身来完成。
关于c - 以下程序中用于字符串比较的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43110051/