在C中的相同函数中将字符值重置为null

时间:2013-10-24 11:17:14

标签: c

我遇到了将psswrd []的值重新设置为NULL的问题,当我从另一个函数返回而不是使用相同的函数时,它工作正常,例如我的第一个输入是“averylonginput”,因为输入是是的,我会再次键入正确的“thepass”,但现在的值是“passnginput”,前一个输入和当前输入混合了,因为新的输入已经覆盖了之前的...

#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它有什么区别?

1 个答案:

答案 0 :(得分:3)

表达式psswrd[NULL]本身不做任何事情。这跟写psswrd[0]一样。如果你启用了警告,你应该收到一个警告,可能是因为NULL可能是一个指针而你用它作为索引。

如果要清除它,请使用例如memset

memset(psswrd, 0, sizeof(psswrd));