2016-09-11 15 views
-2

次のコードを実行すると、 '>'が出力され、入力を待ってからsegfaultsが出力されます。なぜ誰が知っていますか?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を使用してください。

関連する問題