psswrd[] の値を NULL にリセットする際に問題があります。別の関数から戻ると問題なく動作しますが、同じ関数では動作しません。たとえば、入力が false であるため、最初の入力は「averylonginput」です。 「thepass」である正しいものをもう一度入力しますが、値は「thepassnginput」になり、以前の入力と現在の入力が混同されています。新しい入力が前の入力をオーバーレイしているためです...
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#include <process.h>
success(){
clrscr();
printf("Press Any Key to Go Back and Login Again");
getch();
}
int cnt;
void login(){
char ch,
mypass[]="thepass",
psswrd[256]={0};
START:
clrscr();
printf("Enter Password: ");
clreol();
do{
ch=getch();
if( isprint(ch) ){
psswrd[ cnt++ ] = ch;
printf("%c", '#');
}
else
if(ch==8 && cnt){
psswrd[ cnt-- ] = '\0';
printf("%s", "\b \b");
}
}
while(ch!=13);
printf("\nCurrent Password: %s",psswrd); // Check Output
// Just an exit option
printf("\n\nPress Any Key to Continue, ESC to exit");
int opt;
opt=getch();
if(opt==27) exit(0);
else
//-------------------
if(!strcmp(psswrd,mypass)){
cnt=NULL;
clrscr();
printf("Success");
}
else{
psswrd[NULL];
cnt=NULL;
goto START;
}
}
void main(){
LOGIN: login();
success();
goto LOGIN;
}
コードは使用して修正されているmemset(psswrd, 0, sizeof(psswrd));
ため、別の関数から来たときにmemsetなしで機能するという違いは何ですか?