将未知字符添加到最后一个字符串

下面是我在C++中设计的应用程序的一部分。下面的代码片段显示***为用户输入的密码。在程序中的两个地方使用代码,一个工作正常,另一个地方在enterdPassword的末尾显示未知字符。将未知字符添加到最后一个字符串

这里工作正常。输入的密码保存在文件中以备后用。

if(FirstRun()){ 

display_welcome_text_first_run();

cout<<"\nEnter A Password(Max 13 character): ";

for(i=0; i<13; i++){

x = getch();

if(x == '\r'){ break; }

putchar('*');

p[i]=x;

}

p[i+1]='\0';

string pwd(p);

ofstream o(PASSWORD_FILE,ios::binary);

o <<pwd<<endl;

o.close();

这显示错误它示出了在enterdPassword末端的未知字符。

bool verifyPassword(){ 

string savdPassword;

char px[20], x;

int i;

cout<<"Enter Your Password To Continue: ";

for(i=0; i<13; i++){

x = getch();

if(x == '\r'){ break; }

putchar('*');

px[i] = x;

}

px[i+1] = '\0';

string enterdPassword(px);

ifstream pp(PASSWORD_FILE, ios::binary);

pp>>savdPassword;

pp.close();

cout<<endl<<enterdPassword;<<" "<<savdPassword; //for debugging

if(enterdPassword == savdPassword){

return true;

}

else{return false;}

}

程序运行的图像。

我不明白为什么相同的代码(只有不同​​的变量)给予不同的工作如何纠正代码以正确工作?

回答:

你必须改变

p[i+1]='\0'; 

p[i]='\0'; 

因为i在上次循环迭代后已被递增。

然而,最好不要在所有使用的原始字符数组:

string pwd; 

for(i=0; i<13; i++){

x = getch();

if(x == '\r'){ break; }

pwd += x;

}

回答:

考虑x =='\ r'的情况。这里没有存储i px [i]的值。您将'\ 0'字符存储在第i + 1个位置。

您应该将此更改为px [i](对于输入\ r的i)会给出正确的字符。

px[i]=='\0' 

回答:

为了简单起见假设你输入一个字母的密码(不不管它是什么)。

您输入循环,变量i等于0。然后循环迭代,并且i增加到1,并且您阅读换行符(或更确切地说'\r')并且您跳出循环,i等于1。然后,您终止字符串i + 1,因此您将终止符设置为px[2],超出输入字符串的长度。

以上是 将未知字符添加到最后一个字符串 的全部内容, 来源链接: utcz.com/qa/266605.html

回到顶部