如何指向主要的char * argv []?

时间:2014-01-29 08:55:19

标签: c++ c arrays pointers main

在c ++中,我有一个主要功能

  int argc, char * argv[]

我需要在另一个函数中访问argv[]中的数据(即参数)。

我将声明一个全局变量,一个指向char **argv的指针。

我该怎么做?

2 个答案:

答案 0 :(得分:11)

在C ++中,通常*处理argv的最佳方法是:

int main(int argc, char **argv)
{
  std::vector<std::string> args(argv, argv + argc);
}

现在你有args,一个正确构建的std::vectorargv的每个元素保存为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)
    ...
}