fgets上的分段错误

时间:2016-09-11 19:01:54

标签: c segmentation-fault 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]);
                }
}

1 个答案:

答案 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会期望nul被终止char *而你传递char,这会导致未定义的行为。

sizeof将返回数组的大小而不是字符串的长度。因此,使用strlen来获取字符串的长度。