c - 如果从第三个参数开始,getopt 总是返回 -1

标签 c objective-c

我正在制作一个简单的控制台,它根据第二个参数的命令执行某些操作。下面是简化的代码。然而,我的控制台不打印任何 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/

相关文章:

c - 如何在 C 中将矩阵乘以矩阵?为什么这不起作用?

c - 在 MPLAB 中设置具有多个源文件的 C 项目

java - 使用 JCuda 计算肤色未给出正确的百分比

ios - IOS MapView中有没有注解标题回调函数或者设置目标的方法?

objective-c - CGContextDrawLinearGradient 导致 EXC_BAD_ACCESS

objective-c - Runloop 和线程的区别?

c - 替代 C 中的成员变量

c++ - 在 C、C++ 中将 bool 变量与 1 和 0 进行比较是否安全?

ios - 如何在 Storyboard中使用自定义 UITextField

ios - 我们如何使用MFMailComposeViewCotroller发送设备信息