c - C 中是否有任何机制可以从用户那里获取密码,就像我们在 JAVA 中作为密码字段一样

标签 c

密码,输入时不应可见(星号应可见,而不是字符)。能不能像我们用JAVA那样用C来实现。

最佳答案

使用 Linux 平台和终端,您必须修改终端行为、禁用回显并使用非规范模式

#include <termios.h>
#include <stdio.h>
#include <stdbool.h>

static struct termios oldPar, newPar;

void initTermios(bool echo) {
    tcgetattr(0, &oldPar);
    newPar = oldPar;
    newPar.c_lflag &= (tcflag_t)~ICANON;
    newPar.c_lflag &= echo ? (tcflag_t)ECHO : (tcflag_t)~ECHO;
    tcsetattr(0, TCSANOW, &newPar);
}

void resetTermios(void) {
    tcsetattr(0, TCSANOW, &oldPar);
}

char getch_(bool echo) {
    int ch;
    initTermios(echo);
    ch = getchar();
    resetTermios();
    return (char)ch;
}

char getch(void) {
    return getch_(false);
}

int main(void) {
    char c;
    char psw[16] = { 0 };
    size_t index = 0;
    printf("Insert password: ");
    do
    {
        c = getch();
        printf("*");

        psw[index++]= c;

    }
    while ((index < (sizeof(psw)-1)) && (c!='\n'));

    printf("\n\nPassword: %s\n", psw);

    return 0;
}

关于c - C 中是否有任何机制可以从用户那里获取密码,就像我们在 JAVA 中作为密码字段一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41848193/

相关文章:

c++ - 什么时候整数到浮点转换无损?

CPP_Magic IF_ELSE 宏?

c - 指向 C 中指针数组的指针数组

java - C++代码覆盖工具

objective-c - C/Objective-C 中 Malloc 16 字节的泄漏

c - RL_ARM的TCP模式下close和abort的区别

C 将文件内容从 EOF 复制到 SOF

c - linux 用户空间中的非阻塞计时器(C 语言)

c - sizeof() 如何用于 char*(指针变量)?

c - 图像数组的数组填充最快的是什么