使用 getopt optarg 的 fopen 错误问题

Problem with fopen error using getopt optarg

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

I 运行 with ./programname -w filename.txt

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

我post这里放一段代码让大家明白,谢谢!

P.S。抱歉我的英语不好!

    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);

If such a character is followed by a colon, the option requires an argument

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

The man page