我正在使用optarg
。即使我引用它,我输入的参数也会分成空格。
我的代码:
while ((c = getopt(argc, argv, "d:f:")) != -1)
switch (c) {
case 'd':
dflag++;
break;
case 'f':
fflag++;
break;
case '?':
if (optopt == 'd' || optopt == 'f')
fprintf(stderr, "Option -%c requires an argument.\n", optopt);
else if (isprint(optopt))
fprintf(stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf(stderr,
"Unknown option character `\\x%x'.\n",
optopt);
return 1;
default:
usage();
return 1;
}
if (fflag > 1 || dflag > 1 || fflag >= 1 && dflag >= 1) {
fprintf(stderr, "Please choose one option only.");
return 1;
}
for (index = optind; index < argc; index++) {
printf("Non-option argument %s\n", argv[index]);
usage();
}
printf("%s",optarg);
我这样运行:
a.exe -d "c:\Program Files\"
输出结果为:
C:\Program
这是我使用的getopt代码: https://github.com/seastorm/PuttyRider/blob/master/Wingetopt.c
答案 0 :(得分:1)
问题出在你的论点上,而不是你的代码。命令行中的最后两个字符(\"
)会导致最后一个双引号被转义。因此,您的报价失败。
对我来说,如果我在反斜杠后面添加一个尾随空白字符,你的代码就可以了:
a.exe -d "c:\Program Files\ "
如果我在双引号前面转义反斜杠,它也可以工作:
a.exe -d "c:\Program Files\\"
我使用Visual Studio 2012在Windows 7上编译了代码。我在代码的开头添加了以下行,以便编译:
int c = 0;
int dflag = 0;
int fflag = 0;
int index = 0;