2014-06-09 55 views
-2

我已经从网上复制了这个功能。我不明白c == 8 && pos在这个功能中意味着什么,ch是一个字符,它怎么可能等于8。我想将密码长度更改为4,现在是13。当我尝试更改并编译它时。程序运行成功,但不停止输入密码,即使按下输入密码也不会停止输入密码。我的(密码)功能有什么问题?

我认为它必须在c == 8 && pos下面的函数中做些什么。

void password(char buffer[]) 
{ 
     char c; 
     int pos = 0; 
      printf("Enter Password : "); 
     do 
      { 
      c = getch(); 
       if(isprint(c)) 
       { 
        buffer[ pos++ ] = c; 
        printf("%c", '*'); 
       } 
       else if(c == 8 && pos) 
       { 
        buffer[ pos-- ] = '\0'; 
        printf("%s", "\b \b"); 
       } 
      }while(c != 8); 
} 
+0

8是一个ASCII退格字符,该部分是处理当您按退格键时删除字符。 – PeterJ

+0

'13'是'Enter'键的ASCII码。 'while(c!= 13);''Enter'后会停止输入' –

+0

非常感谢! –

回答

1

c == 8正在检查ASCII character值是否等于退格字符。 & & pos还检查位置是否不为零。它相当于“pos!= 0”。代码是从缓冲区中删除退格字符。而且,这个函数可能容易发生缓冲区溢出。由于您传递的是缓冲区地址,但没有最大大小,因此当用户输入比分配的内存长的字符串时会发生什么情况。您应该将缓冲区长度也作为参数传入,并验证缓冲区的长度。