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 に答える