这个函数是我从网上复制过来的。我不明白 c == 8 && pos
在这个函数中意味着什么,而 ch
是一个 char 它怎么可能等于 8
。我想将密码的长度更改为 4,现在是 13。当我尝试更改并编译它时。程序成功运行,但它不会停止获取密码,即使按 Enter 键也不会停止获取输入密码。
我认为它必须在以下函数中对 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 );
}
最佳答案
c==8 正在检查 ASCII character 是否值等于退格字符。 && pos 还检查位置是否不为零。它相当于“pos!= 0”。该代码正在从缓冲区中删除退格字符。此外,该函数很容易出现缓冲区溢出。由于您传递的是缓冲区的地址,但没有最大大小,因此当用户输入比分配的内存长的字符串时会发生什么。您还应该传入缓冲区长度作为参数,并验证 pos < buffer length。
关于c - 我的(密码)功能有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121714/