如何将 main 的 *argv[] 传递给函数?
Posted
技术标签:
【中文标题】如何将 main 的 *argv[] 传递给函数?【英文标题】:How can I pass main's *argv[] to a function? 【发布时间】:2011-12-14 12:45:39 【问题描述】:我有一个可以接受命令行参数的程序,我想从一个函数访问用户输入的参数。如何将*argv[]
从int main( int argc, char *argv[])
传递给该函数?我对指针的概念有点陌生,*argv[]
看起来有点太复杂了,我无法自己解决。
我们的想法是通过将我想要处理参数的所有工作移动到库文件中,让我的main
尽可能干净。当我设法在main
之外获得这些论点时,我已经知道我与这些论点有什么关系。我只是不知道如何让他们到达那里。
我正在使用 GCC。 提前致谢。
【问题讨论】:
【参考方案1】:只要写一个函数比如
void parse_cmdline(int argc, char *argv[])
// whatever you want
并在main
中将其称为parse_cmdline(argc, argv)
。不涉及魔法。
事实上,你并不需要传递argc
,因为argv
的最后一个成员保证是一个空指针。不过既然你有argc
,那你还不如过去呢。
如果函数不需要知道程序名称,你也可以决定调用它为
parse_cmdline(argc - 1, argv + 1);
【讨论】:
当 argv 被定义为 const char *argv[] 时呢? OS X 就是这样,我无法完全改变 Apple 的 ABI... @MarcusJ 是的——ARC 确实在 OSX 上的 XCode 中妨碍了这一点。我必须将它们传递给我的 ObjC++ 类方法,如getParams(argc,argv)
,但随后必须声明该函数,如 static std::map<std::string,std::string> getParams(int argc, const char **argv)
注意**argv
。然后,在类方法中,我可以像在main
函数中一样正常使用argv
。 (返回结果中的map
是因为我的函数将变量转换为键=值映射对。并不是说您也可以这样做。)【参考方案2】:
只需将 argc
和 argv
传递给您的函数。
【讨论】:
【参考方案3】: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 );
【讨论】:
以上是关于如何将 main 的 *argv[] 传递给函数?的主要内容,如果未能解决你的问题,请参考以下文章
以这种格式将 argv 变量传递给 main 的结果 main( int argc, char const * argv )