我正在尝试使用getopt()的optarg参数处理参数参数,但是它保持为空。这与c99标准有关吗?我知道我实际上需要从optarg复制字符串,但是它永远都不会被设置。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *optarg;
int ch;
char *indir = NULL;
while ((ch = getopt(argc, argv, "d:")) != -1) {
switch(ch) {
case 'd':
indir = optarg;
fprintf(stderr, "Optarg: %s\n", optarg);
fprintf(stderr, "Dir name: %s\n", indir);
break;
default :
fprintf(stderr, "Usage: test -d <input directory>\n");
exit(1);
}
}
if(indir == NULL){
fprintf(stderr, "Input directory required.\n");
exit(1);
}
else{
printf("Input dir: %s\n", indir);
}
return 0;
}
最佳答案
optarg是通过调用getopt()初始化的东西,您可以通过对其进行初始化来覆盖它。删除行“ char * optarg;”而且你应该很好走。
关于c - getopt()中的optarg始终为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38214785/