2017-01-25 2 views
-3

암호처럼 사용자로부터 암호를 가져 오는 메커니즘이 있습니까? 입력하는 동안 보이지 않아야합니다 (별 대신 문자로 표시되어야 함). JAVA에서와 마찬가지로 C 언어로도 할 수 있습니까?C에서 Java에서 비밀번호 필드

+1

예, 그것을 할 수있는 비 정식 모드를 사용하여, 당신은 터미널 동작을 수정해야합니다 리눅스 플랫폼과 단말기를 사용하지만, 플랫폼에 의존하고 C 언어 관련이 없습니다. –

+0

누구나 똑같이 작동하는 몇 가지 기능을 제안 할 수 있습니까? – UserAnonymous

+0

현재 사용중인 플랫폼을 알려 주시면 유용한 답변을 얻으실 수 있습니다. –

답변

3

반향을 비활성화하고

#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; 
} 
+0

'new.c_lflag & = ~ ICANON;'당신은'새'를 사용하고 있습니까? – Michi

+0

@Michi 나는 너를 못 만났지 만, 그 var의 이름을 바꾸는 것을 편집했다. – LPs

+0

어때 [고쳐 이것을] (http://pastebin.com/raw/LdxPVbc9)? – Michi

관련 문제