我遇到了将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它有什么区别?
答案 0 :(得分:3)
表达式psswrd[NULL]
本身不做任何事情。这跟写psswrd[0]
一样。如果你启用了警告,你应该收到一个警告,可能是因为NULL
可能是一个指针而你用它作为索引。
如果要清除它,请使用例如memset
:
memset(psswrd, 0, sizeof(psswrd));