所以,我正在開發一個簡單的密碼程序。我有了這個代碼,到目前爲止如何限制輸入的字符數
/* 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對於密碼也是不安全的,因爲它會花費不同的時間來寫錯誤和寫密碼,所以如果你測量時間,你可以確定寫入和錯誤的字符序列。 – 2014-09-23 05:17:01
謝謝,伊萬。這僅僅是課堂作業,我們現在正在翻閱字符串,所以這就是爲什麼它很簡單。所以我做了char usrIn [10]和fgets(usrIn,10,stdin),即使我輸入正確的字符串,它也會抱怨密碼不正確 – 2014-09-23 05:26:32
fgets讀取所有字符,包括'\ n'(當您單擊Enter時)。因此,首先在'\ n'出現之前檢查長度。如果長度很好,用0代替\ n並比較字符串(buffer [9] ='\ 0')。 – 2014-09-23 05:48:48