【问题标题】:Problem with fopen error using getopt optarg使用 getopt optarg 的 fopen 错误问题
【发布时间】:2021-03-10 19:58:13
【问题描述】:

运行它不会打开我在选项 -w 中使用 optarg 解析的文件。

我使用 ./programname -w filename.txt 运行

filename.txt 与 exe 文件等在同一目录中...

我在这里贴一部分代码让大家理解,谢谢!

附:对不起我的英语不好!

    while((opt = getopt(argc, argv, "lw")) != -1) 
        switch(opt) {
            case 'l': {
                //... do something ...
            } break;

            case 'w': {
                int counter = 0;
                FILE* ifp = fopen(optarg, "r"); 
                CHECK_OPEN_FILE(ifp, optarg);
                while(fgets(buffer, 256, ifp) != NULL)
                    counter += wordscounter(buffer);
                fprintf(stdout, "File has %d words.\n", counter);
                fclose(ifp);
            }break;

            case '?': {
                if(optopt == '-')
                    break;
                fprintf(stderr, "ERROR: Option -%c unrecognized...\n", optopt);
            } break;

        }

在这部分代码中我有一个问题:

FILE* ifp = fopen(optarg, "r"); 
CHECK_OPEN_FILE(ifp, optarg);

【问题讨论】:

  • fopenNULL 表示检查errno
  • 您好,欢迎使用 SO,请提供一个比“有人能帮我找出这个 C 代码中的错误吗?”更好的标题
  • 我真的不明白你在问什么。您的句子“无法打开由运行为./a.out -w esfile.txt的命令行解析的file.txt”的语法不明智。
  • 尝试以相同的方式创建一个文件(使用不同的名称),看看它是否出现在与您要阅读的文件相同的位置。
  • while((opt = getopt(argc, argv, "lw:")) != -1) { :。 [并且在案例标签之后删除这些愚蠢的{}块]

标签: c fopen getopt


【解决方案1】:

如果这样的字符后跟一个冒号,则该选项需要一个 论据

您缺少: 选项w。您应该让lw: 指定w 有一个值。否则 optarg 为空

The man page

【讨论】:

    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2021-07-03
    相关资源
    最近更新 更多