0
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXLINE 512
main(int argc,char* argv[]){
    FILE *fi;
    fi=open(argv[1],"r");
    char linie[MAXLINE],*p;
    for ( ; ; ) {
        p = fgets(linie, MAXLINE, fi);
        linie[MAXLINE-1] = '\0';
        printf("%s", linie);
    }
    fclose(fi);

};

您好,我有这段代码,基本上我要做的是创建一个用于打印命令行参数中给出的文件的 c 源代码,有人可以告诉我为什么会出现分段 11 错误吗?谢谢

4

3 回答 3

8
  1. 你的for循环没有结束。
  2. 您不检查来自 的结果fgets,它会NULL在您到达文件末尾时给出。您也不会检查 的结果fopen,它会NULL在文件无法打开时给出。
  3. 使用前不检查是否argc至少为 2argv[1]
  4. 您正在使用open而不是fopen

提示:-Wall -pedantic如果您使用的是 GCC,请使用。

于 2013-04-13T15:12:04.267 回答
3

您正在呼叫open()您可能打算呼叫的地方fopen()。你不应该忽略编译器警告。

此外,您应该检查 的返回值fopen()以确保它不是NULL.

于 2013-04-13T15:10:29.847 回答
1

固定版本:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXLINE 512
main(int argc,char* argv[]){
    FILE *fi;
    if (argc < 2)
        return;
    fi=fopen(argv[1], "r");
    if (!fi)
        return;
    char linie[MAXLINE],*p;
    for ( ; ; ) {
        p = fgets(linie, MAXLINE, fi);
        if (p == NULL)
            break;
        linie[MAXLINE-1] = '\0';
        printf("%s", linie);
    }
    fclose(fi);
};
于 2013-04-13T15:13:36.187 回答