0

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なしで機能するという違いは何ですか?

4

1 に答える 1