나는 사용자가 이전에 strncpy를 사용하여 저장 한 내용을 비교해야합니다 ... strncpy 부분이 작동한다는 것을 알고, puser-> Username 등의 입력을 비교할 때 문제가 발생합니다 ...strcmp 문제
int admin_signIn(struct profile *puser)
{
int i=0;
for(i=0;i<3;i++)
{
strncpy((puser+i)->UserName, "admin", strlen("admin")+1);
strncpy((puser+i)->Pwd, "password", strlen("password")+1);
printf("Enter admin user name:");
fgets(input,10,stdin);
rewind(stdin);
printf("Enter admin password:");
fgets(input,10,stdin);
//printf("the password is %s", puser->Pwd);
if(strcmp((puser+i)->UserName, input)==0 && strcmp((puser+i)->Pwd, input)==0)
{
printf("The Administrator username and password is incorrect, please try again\n");
}
else
{
printf("the info is good\n");
}
}
printf("max number of attepmpts exceded, goodbye!");
}
'strcmp'는 입력이 일치 할 때 0을 반환합니다. http://en.cppreference.com/w/cpp/string/byte/strcmp 입력 한 사용자 이름을 입력 한 암호로 덮어 쓰더라도 ... – DCoder
'strncpy()'는 아마도 여러분이 사용하고자하는 함수가 아닐 것입니다. 처음. 문자열로 작업하도록 설계되지 않았습니다. 문자 배열이 반드시 제로 - 종료되는 것은 아니 어서 설계되었습니다. 문자열이 종료되었는지 확인하십시오. – pmg
'(puser + i) -> UserName이 성취해야 할 대상은 무엇입니까? 왜 사용자 이름/암호를 얻으려고 시도 할 때마다 다른 사용자 프로필을 사용합니까? 이것이 당신이보고있는 버그의 원인이지만, 어쨌든 의미가없는 것처럼 보이지는 않습니다. 나는'rewind '를 의미있는 방식으로 표준 입력에 적용 할 수 있다고 믿지 않는다 (표준 입력에서도 의미가없는'fseek'호출과 동일하다). –