2016-09-11 63 views
-2

當我運行下面的代碼時,它打印'>',等待輸入,然後段錯誤。有人知道爲什麼嗎?fgets上的分段錯誤

int main(int argc, char **argv){ 
     char input[MAX_INPUT_LINE]; 

     while(1==1){ 
       if (isatty(0)){ 
         printf(">"); 
         } 
       fgets(input, MAX_INPUT_LINE, stdin); 
       int len1=sizeof(input); 
       for (int i=0; i<len1; i++){ 
         printf("%s", input[i]); 
       } 
} 
+3

發佈完整的代碼。 – ameyCU

+1

從您發佈的代碼中,無法複製。雖然你沒有檢查'fgets'的返回值。 –

+0

剛剛更新了它 –

回答

4
int len1=sizeof(input);   
for (int i=0; i<len1; i++){ 
     printf("%s", input[i]); // <-- %s would expect char * not char 
} 

使用%c打印字符不%s%s預計會終止char *並且您通過char,這會導致未定義的行爲。

sizeof會返回數組的大小而不是字符串的長度。因此使用strlen來獲取字符串的長度。