好的,所以我正在尝试制作一个需要登录名和密码的C程序。 在第一次运行时,它将要求用户为他输入登录名和密码,然后它将这些信息保存在全局结构中,并且此全局结构将保存到磁盘。 我遇到问题的部分是密码。 我正在尝试制作代码,以便人们的密码在屏幕上不可见。这是我的密码功能:
void senha(void)
{
static int senhac = 0;
char temps[32];
do
{
temps[senhac] = getchar();
if(temps[senhac] == EOF)
return;
putchar('*');
conta->senha[senhac] = temps[senhac];
senhac++;
fflush(stdin);
}
while(1);
}
并且全局结构就是这个:
struct accounts {
char login[32];
char senha[32];
};
struct accounts *conta;
当程序到达“senha(void)”函数时,它会崩溃。 编译器不显示任何警告或错误。 什么可能出错?
答案 0 :(得分:0)
do
{
temps[senhac] = getchar();
if(temps[senhac] == EOF)
return;
putchar('*');
conta->senha[senhac] = temps[senhac];
senhac++;
fflush(stdin);
}
while(1);
你重复的循环超过了temps数组的大小array out of bounds and overflow
。
检查条件while(senhac<32);
答案 1 :(得分:0)
getchar()
返回int
。将temps[32]
声明为int
。如果您不在MS-DOS上fflush(stdin);
将调用未定义的行为。