그래서 간단한 암호 프로그램을 만들고 있습니다. 루프가 중단됩니다 - 지금까지입력 한 문자 수를 제한하는 방법
/* simple password prog */
#include<stdio.h>
#include<string.h>
int main(){
char usrIn[9];
char password[]={"AXcd8002"};
do {
fprintf(stdout,"\n Password:");
fgets(usrIn,9, stdin);
if (strcmp(usrIn,password)<0 || strcmp(usrIn,password)>0) {
fprintf(stdout,"\n Password incorrect"); };
}while((strcmp(password,usrIn))!=0);
fprintf(stdout, "\n The password is correct \n");
return 0;
}
이 코드는 암호가 잘못된 경우가 맞습니다 경우, 루프는 계속됩니다, 제대로 작동이 코드를 가지고있다. 하지만 작동하지 않는 것은 다음과 같습니다. 사용자가 적어도 한 문자 이상 암호를 입력하면 프로그램은 여전히 올바른 것으로 말합니다. 예를 들어, 사용자가 AXcd8002AAA를 입력하면 fgets는 AXcd8002 만 읽고 AAA는 무시합니다. 어떻게 이런 일이 일어나지 않도록 할 수 있습니까?
버퍼를 암호보다 크게 만듭니다. 간단하지 않습니까? 또한 strcmp는 암호에 대해 다른 시간을 소비하므로 strcmp는 안전하지 않으므로 시간을 측정하면 문자의 쓰기 및 잘못된 순서를 결정할 수 있습니다. –
감사합니다, 이반. 이것은 단지 클래스 할당 일뿐입니다. 그래서 지금은 문자열을 다루고 있습니다. 그래서 그것이 너무 단순합니다. 그래서 내가 올바른 문자열을 입력 했는데도 char usrIn [10]과 fgets (usrIn, 10, stdin)을 만들었고, 패스워드가 맞지 않다고 불평한다. –
fgets는 '\ n'을 포함한 모든 문자를 읽는다. 먼저 '\ n'이 처음 나타날 때까지 길이를 확인하십시오. 길이가 좋으면 \ n을 0으로 대체하고 문자열을 비교하십시오 (buffer [9] = '\ 0'). –