用“*”C ++替换输入

时间:2011-09-13 16:33:37

标签: c++ passwords

我希望用户输入一个密码。当然这是一个秘密的密码,所以没有人应该看到它。 所以我试图用'*'替换用户输入的字母和数字。这是我的尝试。

while ((pw=getch())!='x'){
cout << "*";
strcpy(pwstring,pw);

}

input_pw=atoi(pwstring.c_str());

后来我希望'x'成为'enter'。但目前并不重要。有了这个,我在Visual Studio下得到了一些编译器错误。

Fehler  3   
error C2664: 'strcpy': Konvertierung des Parameters 1 von 'char' in 'char *' nicht möglich  c:\users\tim\desktop\kalssnne\methoden.h    zeile: 70

我会尝试翻译这个。

error 3
error C2664: 'strcpy': converting of parameter 1 from 'char' to 'char*' is not possible.



  official english error code
    "'function' : cannot convert parameter number from 'type1' to 'type2'" 

thank u:  R. Martinho Fernandes

但是这意味着什么,我该如何解决?

希望你能帮助我

问候。

4 个答案:

答案 0 :(得分:4)

您的问题不是关于C ++,而是关于如何与您的终端进行交互。该语言(故意)完全不知道输入和输出的处理方式,您担心的一切都是终端的行为方式。因此,任何答案都将在很大程度上取决于您的平台和终端。

在Linux中,您可能希望查看termios.hncurses.h。有一个旧的Posix函数getpass()可以执行类似于您想要的操作,但它已被弃用。

不幸的是我不知道如何在Windows中进行终端编程。

答案 1 :(得分:3)

在posix系统上使用getpass (3)

它不会给你asterix回声,相反它没有回声,但它是这样做的方式。

或者,如果您使用的是BSD系统,则可以使用readpassphrase (3),这比旧电话更灵活。

答案 2 :(得分:1)

R. Martinho Fernandes说:strcpy doesn't do what you think it does.

strcpy获取char*缓冲区和char*源,并将所有数据从第二个(直到第一个零字符)复制到第一个。最简单的解决方案是跟踪pwstring的长度并一次添加一个字符:

char pwstring[100];
int length = 0;
while ((pw=getch())!='x' && length < 99){
    cout << "*";
    pwstring[length] = pw;
    length = length + 1;
}
pwstring[length] = '\0';
int pwint = atoi(pwstring);

[编辑]如果pwstring是一个std :: string,那么这变得非常简单,因为它已经跟踪它自己的长度。

std::string pwstring;
while ((pw=getch())!='x'){
    cout << "*";
    pwstring += pw;
}
int pwint = atoi(pwstring.c_str());

答案 3 :(得分:-1)

strcpy(pwstring,pw);

我猜pwstring是一个std :: string? strcpy是一个c函数,它作用于'c'空终止字符串。您正在为它提供一个c ++字符串和一个int。