我希望用户输入一个密码。当然这是一个秘密的密码,所以没有人应该看到它。 所以我试图用'*'替换用户输入的字母和数字。这是我的尝试。
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
但是这意味着什么,我该如何解决?
希望你能帮助我问候。
答案 0 :(得分:4)
您的问题不是关于C ++,而是关于如何与您的终端进行交互。该语言(故意)完全不知道输入和输出的处理方式,您担心的一切都是终端的行为方式。因此,任何答案都将在很大程度上取决于您的平台和终端。
在Linux中,您可能希望查看termios.h
或ncurses.h
。有一个旧的Posix函数getpass()
可以执行类似于您想要的操作,但它已被弃用。
不幸的是我不知道如何在Windows中进行终端编程。
答案 1 :(得分:3)
在posix系统上使用getpass (3)。
它不会给你asterix回声,相反它没有回声,但它是这样做的方式。
或者,如果您使用的是BSD系统,则可以使用readpassphrase (3),这比旧电话更灵活。
答案 2 :(得分:1)
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。