C ++ Manipulating Strings,可以打印索引字符但不能完成字符串

时间:2017-02-06 07:11:24

标签: c++ string indexing passwords character

我正在尝试屏蔽我在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;
}

1 个答案:

答案 0 :(得分:1)

当您定义对象password时,它开始为,这意味着对它的任何索引都将超出范围并导致未定义的行为

您不需要索引变量i,您应该字符追加到字符串中:

password += c;