如何将 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】:

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

【讨论】:

【参考方案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 )

argc 和 argv 用于除 main 以外的函数

main:处理命令行选项

main中的argv和argc

C7 : 进程环境

如何将函数中使用的数组传递给动态分配的main数组?