以下是我在C ++中设计的应用程序的一部分。下面的代码片段显示***作为用户输入的密码。代码在程序中的两个位置使用,一个正常工作,另一个位置在ACCESS_SECRET
末尾显示未知字符。
此处工作正常。输入的密码保存在文件中以供进一步使用。
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
程序运行的图像。
我不明白为什么相同的代码(仅使用不同的变量)给出不同的工作如何根据需要更正代码?
答案 0 :(得分:5)
你必须改变
p[i+1]='\0';
到
p[i]='\0';
因为i
在最后一次循环迭代后已经增加了。
但是,最好不要使用原始字符数组:
string pwd;
for(i=0; i<13; i++){
x = getch();
if(x == '\r'){ break; }
pwd += x;
}
答案 1 :(得分:4)
考虑x ==&#39; \ r&#39; 。这里没有存储i px [i]的值。您存储&#39; \ 0&#39;第i + 1位的角色。
您应该将其更改为px [i](对于输入\ r的i),给出了正确的字符。
px[i]=='\0'
答案 2 :(得分:2)
为简单起见,我们假设您输入一个单字母密码(无关紧要)。
您输入循环,变量innerHTML
等于div
。然后循环迭代,并且i
增加到0
,并且您读取换行符(或者更确切地说是i
)并且您跳出循环,1
等于到'\r'
。然后在i
处终止字符串,因此您将终结符设置为1
,超出输入字符串的长度。