我正在制作一个简单的控制台,它根据第二个参数的命令执行某些操作。下面是简化的代码。然而,我的控制台不打印任何 NSLog
,检查后,opt
始终为 -1
。
用法是myconsole firstMethod -t“这是一个测试字符串”
int main(int argc, char *argv[], char *envp[]) {
NSString *stringArgument = [NSString stringWithFormat:@"%s", argv[1]];
if([stringArgument caseInsensitiveCompare:@"firstMethod"] == NSOrderedSame) {
extern char *optarg;
extern int optind;
int opt;
while ((opt = getopt(argc, argv, "t:")) != -1) {
switch (opt){
case 't':
NSLog(@"Case t");
break;
default:
NSLog(@"Default");
}
}
}
}
知道为什么失败吗?提前致谢。
最佳答案
一般来说,非选项参数必须放在最后。 GNU getopt()
默认情况下自动将它们移动到末尾,但您的实现没有此功能,因此 getopt()
在第一个非选项参数处停止处理。
如果您始终将第一个参数作为非选项(例如,单个命令名称),则可以将修改后的(前进一个参数)参数 vector 传递给 getopt()
像这样:
while ((opt = getopt(argc-1, argv+1, "t:")) != -1){
那么第一个参数(在您的情况下不是选项)应该被跳过。
关于c - 如果从第三个参数开始,getopt 总是返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60315729/