C语言模拟密码输入(显示星号)问题,帮看一下请光临寒舍

C语言 码拜 4年前 (2016-09-22) 532次浏览
问题:(第一段程序是问题程序,第二段是正确程序)为什么第一段的问题程序在输出的时候会有垃圾值,而第二段的那个正常程序却没有这个问题呢?
第一段(问题程序):
#include <stdio.h>
#include <conio.h>
#define PWDLEN 20
int main(void)
{
char pwd[PWDLEN];
int i = 0;
char ch;
printf (“请输入您的密码:”);
while (i<PWDLEN)
{
ch = getch();
if(ch == “\r”)
{
printf(“\n”);
break;
}
else
{
pwd[i] = ch;
i++;
printf (“*”);
}
}
printf (“\n”);
printf (“您的密码为:%s\n”, pwd);
return 0;
}
输出的结果是这样子的:
C语言模拟密码输入(显示星号)问题,帮看一下请光临寒舍
第二段(正确程序):
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#define PWDLEN 20
void getpwd(char *pwd, int pwdlen);
int main(){
char pwd[PWDLEN+1];
printf(“Input password: “);
getpwd(pwd, PWDLEN);
printf(“The password is: %s\n”, pwd);
return 0;
}
/**
* 获取用户输入的密码
* @param  pwd     char*  保存密码的内存的首地址
* @param  pwdlen  int    密码的最大长度
**/
void getpwd(char *pwd, int pwdlen){
char ch = 0;
int i = 0;
while(i<pwdlen){
ch = getch();
if(ch == “\r”){  //回车结束输入
printf(“\n”);
break;
}

if(ch==”\b” && i>0){  //按下删除键
i–;
printf(“\b \b”);
}else if(isprint(ch)){  //输入可打印字符
pwd[i] = ch;
printf(“*”);
i++;
}
}
pwd[i] = 0;
}

解决方案

20

加一句pwd[i]=”\0″;就可以了。

20

字符串是要以\0结尾的,你第一段代码里,字符数组后面并未以\0结尾

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言模拟密码输入(显示星号)问题,帮看一下请光临寒舍
喜欢 (0)
[1034331897@qq.com]
分享 (0)