2011-10-24 75 views
10

我有一个程序,可以接受命令行参数,我想从函数访问用户输入的参数。我怎么能通过*argv[],从int main(int argc, char *argv[])该功能?我对指针的概念很陌生,*argv[]对我来说看起来有点太复杂,无法自行解决。如何将main * argv []传递给函数?

这个想法是通过将我想要处理的所有工作移动到库文件来尽可能地保留我的main。我已经知道我在处理main以外的情况时如何处理这些争论。我只是不知道如何让他们在那里。

我正在使用GCC。 在此先感谢。

回答

23

只写一个函数,如

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

,并呼吁在mainparse_cmdline(argc, argv) 。没有魔法介入。

事实上,你并不需要通过argc,因为argv的最后一个成员保证是空指针。但既然你有argc,你不妨通过它。

如果函数不必知道程序名,你也可以决定称其为

parse_cmdline(argc - 1, argv + 1); 
+2

什么时候的argv被定义为为const char * argv的[]?这就是OS X的方式,而且我不能完全改变Apple的ABI ... – MarcusJ

+1

@MarcusJ是啊 - ARC在OSX上的XCode上的确如此。我不得不将它们传递给我的ObjC++类方法,比如'getParams(argc,argv)',但是接下来必须像static static std :: map getParams(int argc, const char ** argv)'注意'** argv'。然后,在类方法内部,我可以像使用'main'函数那样正常使用'argv'。 (返回结果中的'map'内容是因为我的函数将变量转换为key = value映射对,而不是你也可以这样做。) – Volomike

0

只需通过argcargv到您的功能。

0
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); 
} 
相关问题