【问题标题】:Password function won't work密码功能不起作用
【发布时间】:2013-10-13 09:26:34
【问题描述】:

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

【问题讨论】:

    标签: c function crash passwords


    【解决方案1】:
       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);

    【讨论】:

    • 您的回答使我摆脱了这个问题,甚至是一个我没有注意到的无限循环问题。谢谢。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-16
      • 2021-03-24
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 2018-05-13
      相关资源
      最近更新 更多