2013-10-13 59 views
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(無效)」的功能,它崩潰。 編譯器不顯示任何警告或錯誤。 什麼可能會出錯?

回答

0
do 
    { 
     temps[senhac] = getchar(); 
     if(temps[senhac] == EOF) 
      return; 
     putchar('*'); 
     conta->senha[senhac] = temps[senhac]; 
     senhac++; 
     fflush(stdin); 
    } 
    while(1); 

你正在重複循環超過臨時數組的大小,array out of bounds and overflow

檢查條件while(senhac<32);

+1

你的答案救了我從這個問題,甚至一個無休止的循環問題,我沒有注意到。謝謝。 –

+0

不客氣... – Gangadhar

0

getchar()回報int。聲明temps[32]int。如果您不在MS-DOS fflush(stdin);將調用未定義的行爲。