这段代码是如何工作的?

how it works this code?

我没看懂这个功能。有人可以向我解释完整的代码吗? *(pass+i) = temp_passP[i]; 这一行是什么意思? 还有这是什么意思 printf \a printf \b ?

void get_password(char* pass)
    {
        char temp_passP[25];
        int i=0;
         while(1)
        {
                temp_passP[i]=getch();
                if(temp_passP[i]==13){break;}
                else if(temp_passP[i]==8)
                {
                    if(i!=0) {
                    printf("\b \b");  
                    i--;
                    } else {printf("\a");}  
                }
                else
                {
                    printf("*");
                    *(pass+i) = temp_passP[i]; 
                    i++;
                }
                 *(pass+i)='[=10=]'; what it means ?
         }
    }

*(pass+i) 等价于 pass[i]。你必须了解指针。 '\b'表示向后space,它将光标向左移动。 '\a' 表示警报,它会发出蜂鸣声或铃声。

8 等于 '\b'temp_passP[i]==8 表示 'When the user pressed backspace key'。它将光标向左移动,打印 space,并且由于光标向右移动,它再次将光标向左移动。

当用户按下其他键时,它打印'*'并将输入复制到pass[i]

简而言之,该程序在用户按下回车键之前获取输入并将其复制到 pass

这个功能首先要了解的是它不是很好。 char temp_passP[25] 应该只是 int ch,那么所有对 char temp_passP[i] 的引用都可以是 ch。通过这一更改,可能更容易看出代码只是通过 getch() 从 stdin 读取字符,一次一个字符,并检查每个字符。

首先,它将字符与 13 进行比较,这是 Carriage Return 的 ASCII 码。在某些系统上,当用户键入 ENTER 时,系统会将 Carriage Return 和 Line Feed 这两个字符放入 stdin 流中。所以这个检查正在寻找结束线。 (在其他环境中,ENTER 仅生成换行符 (ASCII 10),因此此代码在那里不起作用。)

函数然后将字符与 8 进行比较,这是 Backspace 的 ASCII 代码。该代码正在检查用户是否正在删除输入的最后一个字符。如果是这样,它会将指针备份到 pass 缓冲区并打印 "\b \b" 序列,该序列从屏幕上擦除该字符的星号。如果 pass 缓冲区中没有字符,要么是因为 none 已经输入,要么是所有字符都已用 Backspace 删除,则 "\a" 旨在使铃声响起。

如果字符没有什么特别之处,则用*(pass+i) = temp_passP[i];(或*(pass+i) = ch;)写入pass缓冲区。

*(pass+i) = '[=21=]'; 命令确保 pass 缓冲区在最后一个未被删除的字符之后始终以 null 终止。