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

最佳答案

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

07-24 15:18