我的(密码)功能有什么问题?

时间:2014-06-09 13:50:37

标签: c char

我已经从网上复制了这个功能。我不明白c == 8 && pos在这个函数中的含义是什么,而ch是char,它怎么能等于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 );
}

1 个答案:

答案 0 :(得分:1)

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