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

标签 c char

这个函数是我从网上复制过来的。我不明白 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/

相关文章:

c - 在程序中出现不兼容的整数到指针的转换错误。不确定这是如何/为什么会发生,但正在寻找解释

java - java中如何将char(0-9)转换为int?

c - LVM_GETITEM 困惑

c - 为什么这个循环不起作用

c - 非规范(原始)模式下的异步串行通信并在 linux/osx 中生成 SIGIO

MySql 类型 char 选择最大数量

c - 如何声明和定义 2 维字符串

c++ - 位域和字节顺序

c# - 如何检查 char 数组元素是否为空?

c - 如何在 C 中将目录拼接到包含路径名的 char * 中?