如何将main的*argv[]传递给一个函数?

20

我有一个可以接受命令行参数的程序,我想从函数中访问用户输入的参数。我该如何将*argv[]int main(int argc, char *argv[])传递给该函数?我对指针的概念还比较新,*argv[] 看起来有点复杂,让我自己很难解决。

想法是通过将所有要处理参数的工作移动到库文件中,使我的main尽可能保持简洁。当我成功地在main之外获取这些参数时,我已经知道了该如何处理它们。我只是不知道该如何将它们传递到那里。

我正在使用GCC。 提前感谢您。

3个回答

34

只需编写类似以下的函数:

void parse_cmdline(int argc, char *argv[])
{
    // whatever you want
}

你可以定义一个名为parse_cmdline的函数,在main中以parse_cmdline(argc, argv)的形式调用它。这并不涉及任何魔法。

实际上,你不一定需要传递argc,因为argv的最后一个成员保证是空指针。但既然你有了argc,那么也可以将其传递。

如果该函数不需要知道程序名称,则还可以选择将其调用为

parse_cmdline(argc - 1, argv + 1);

4
当argv被定义为const char *argv[]时怎么办?这是OS X的情况,我无法改变苹果的ABI... - MarcusJ
1
@MarcusJ 是的 - 在OSX上的XCode中,ARC确实会妨碍这一点。我不得不像getParams(argc,argv)这样将它们传递给我的ObjC++类方法,但是然后必须像static std::map<std::string,std::string> getParams(int argc, const char **argv)那样声明该函数。请注意**argv。然后,在类方法内部,我可以像在main函数中一样正常使用argv。(返回结果上的map内容是因为我的函数将变量转换为键=值映射对。你也可能这样做。) - Volomike

2
SomeResultType ParseArgs( size_t count, char**  args ) {
    // parse 'em
}

或者...

SomeResultType ParseArgs( size_t count, char*  args[] ) {
    // parse 'em
}

然后...

int main( int size_t argc, char* argv[] ) {
    ParseArgs( argv );
}

1

只需将argcargv传递给您的函数即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接