将未知字符添加到最后一个字符串
下面是我在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