首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分段故障11

分段故障11
EN

Stack Overflow用户
提问于 2013-04-13 23:07:44
回答 3查看 1.5K关注 0票数 0
代码语言:javascript
运行
复制
#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源代码,用于打印命令行参数中给定的文件,有人能告诉我为什么我得到了command 11错误吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-13 23:12:04

  1. 你的for循环没有结束。
  2. 你不检查fgets的结果,当你到达文件的末尾时,它会给出NULL。也不检查fopen的结果,这会在文件无法打开时生成NULL
  3. 在使用argv[1]
  4. You're而不是fopen

之前,您不会检查argc是否至少为2

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

票数 8
EN

Stack Overflow用户

发布于 2013-04-13 23:10:30

您正在调用open(),您可能打算在其中调用fopen()。你不应该忽略编译器的警告。

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

票数 3
EN

Stack Overflow用户

发布于 2013-04-13 23:13:36

固定版本:

代码语言:javascript
运行
复制
#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);
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15989222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档