使用 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
为空
运行 它不会打开我在选项 -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
为空