这里我已经编写了一个代码来接受用户在输入用户名后输入的密码,我已经使用do while语句编写了一个小代码,以便每当用户输入任何字符时打印出该星号,&当用户输入'!'时,循环终止。 但当我看到用户输入的密码时,它让我感到惊讶,&输入密码的字符串长度,STRING长度总是21,在我的情况下,&密码的输出是用户输入的密码的组合。用户名......发生了什么??????
#include<iostream.h>
#include<conio.h>
#include<string.h>
int main()
{
char username[15],password[15];
int i=0;
cout<<"\nEnter your USERNAME:";
cin>>username;
cout<<"\nenter your password:";
do
{
password[i]=getch();
if(password[i]=='!')break;
cout<<"*";
i++;
}while(i<15);
cout<<"\n\nthe password entered was"<<password<<"\nthe length of the password is" <<strlen(password);
getch();
return 0;
}
答案 0 :(得分:2)
您已定义:
char password[15];
根据你的循环,它一直持续到i
等于14
(即第15个字符)。因此 NULL终止没有空间。让它像这样:
char password[16];
现在,在循环之后,添加:
password[i] = 0;
如果用户未输入“!”,则 i
将位于15
如果他这样做,它将被NULL
字符替换。我认为这是最容易解决的问题。如果你不想要'!'要替换,请在i++;
break;
答案 1 :(得分:1)
您没有使用NULL终止字符串。
do
{
password[i]=getch();
if(password[i]=='!') break;
cout<<"*";-
i++;
}while(i<15);
if (i < 15) password[i] = '\0';
答案 2 :(得分:1)
C字符串必须以特殊字符'\0'
终止,而密码/用户名不是这种情况。您必须将i+1
字符设置为'\0'
:
password[i]=getch();
password[i+1] = '\0';
此外,您还必须考虑您的密码缓冲区还必须包含此字符串,因此如果您定义char password[15];
,则只有14个字符的空格,因此您的循环可以转到14。
答案 3 :(得分:1)
你读了15个字符,但你从不在字符串中写'\ 0',所以它不会被终止。
答案 4 :(得分:0)
是
#include <iostream>
#include <string>
请更正。如果您的编译器不知道这些文件,那么您的编译器就没有任何好处。
那么,为什么不使用std :: string代替char-arrays?
这样可以避免任何这些错误。
你在这里做的是c和c ++的混合。