【发布时间】:2017-03-19 19:00:29
【问题描述】:
我正在尝试编写一个程序来输入密码等文本(显示“*”而不是用户输入的字符)。
问题是,当我使用 char 数组存储密码时,程序运行良好,但是当我使用字符串类变量实现相同目的时,我的程序在显示字符串时崩溃。
代码如下:
// *********THIS CODE WORKS FINE***********
#include <iostream>
#include<string>
#include<conio.h>
int main()
{
using namespace std;
int i=0;
cout<<"Enter a password,press ENTER to finish writing"<<endl;
char passw[20];
passw[i]=getch();
while(passw[i]!=13)
{
i++;
cout<<"*";
passw[i]=getch();
}
passw[i+1]='\0';
cout<<"\nPassword is "<<passw;
return 0;
}
现在当我将char passw[20] 替换为string passw 时:
//**********THIS CODE CRASHES!!*********
#include <iostream>
#include<string>
#include<conio.h>
int main()
{
using namespace std;
int i=0;
cout<<"Enter a password,press ENTER to finish writing"<<endl;
string passw;
passw=getch();
while(passw[i]!=13)
{
i++;
cout<<"*";
passw[i]=getch();
}
cout<<"\nPassword is "<<passw;
return 0;
}
谁能解释为什么会这样?
刚从字符串开始,我对字符串了解的太多了 :)
【问题讨论】:
-
std::string不是无限的字符数组。在您可以访问ith 元素之前,您必须将它放在那里(passw[i]=getch()不会放在那里)。 -
我该怎么做?
-
passw += getch() -
使用追加来填充字符串。您仍然可以使用 getch() 来获取字符。然后将其附加到字符串的末尾并继续。