我正在尝试屏蔽我在OS X上执行的项目的密码。每个屏蔽的字符都附加到名为password的字符串中。但是当我尝试打印或使用字符串时,我什么也得不到。但是,如果我尝试打印字符串的元素,我能够。例。 COUT<<密码;不打印任何东西,但cout<< password [0]将打印字符串的第一个字符。
我做错了什么?
#include <termios.h>
#include <unistd.h>
#include <iostream>
#include <stdio.h>
using namespace std;
int getch();
int main(){
char c;
string password;
int i=0;
while( (c=getch())!= '\n'){
password[i]=c;
cout << "*";
i++;
}
cout<< password;
return 0;
}
int getch() {
struct termios oldt, newt;
int ch;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return ch;
}
答案 0 :(得分:1)
当您定义对象password
时,它开始为空,这意味着对它的任何索引都将超出范围并导致未定义的行为。
您不需要索引变量i
,您应该将字符追加到字符串中:
password += c;