在c ++中,我有一个主要功能
int argc, char * argv[]
我需要在另一个函数中访问argv[]
中的数据(即参数)。
我将声明一个全局变量,一个指向char **argv
的指针。
我该怎么做?
答案 0 :(得分:11)
在C ++中,通常*处理argv
的最佳方法是:
int main(int argc, char **argv)
{
std::vector<std::string> args(argv, argv + argc);
}
现在你有args
,一个正确构建的std::vector
将argv
的每个元素保存为std::string
。看不到丑陋的C风格const char*
。
然后你可以根据需要传递这个向量或它的一些元素。
*它带有记忆和放大器动态分配每个argv
字符串的一个副本的时间开销。但对于绝大多数程序而言,命令行处理并不是对性能至关重要的,而且增加的可维护性和健壮性非常值得。
答案 1 :(得分:6)
应该避免全局变量,你应该更喜欢传递参数。无论如何,你可以使用:
char **global_argv = NULL;
int main(int argc, char * argv[]){
...
global_argv = argv;
...
}
更好的方法是:
void my_fun1(int argc, char **argv); // Passing all the program arguments
void my_fun2(char *arg); // Passing just the one you need
int main(int argc, char * argv[]){
...
my_fun1(argc, argv);
my_fun2(argv[3]); // Supposing you need the 3rd parameter (fourth on argv)
...
}