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