1

好的,所以我正在尝试制作一个需要登录名和密码的 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)”函数时,它会崩溃。编译器不显示任何警告或错误。可能出了什么问题?

4

2 回答 2

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);

于 2013-10-13T09:30:19.507 回答
0

getchar()返回int。声明temps[32]int。如果您不在 MS-DOS 上,fflush(stdin);将调用未定义的行为。

于 2013-10-13T09:30:56.480 回答