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

use*_*608 3 c c++ arrays pointers program-entry-point

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

  int argc, char * argv[]
Run Code Online (Sandbox Code Playgroud)

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

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

我该怎么做呢?

Rei*_*ica 11

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

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

现在你有args一个正确构造的std::vector每个元素argv作为一个std::string.看不到丑陋的C风格const char*.

然后你可以根据需要传递这个向量或它的一些元素.

*它携带动态分配每个argv字符串的一个副本的内存和时间开销.但对于绝大多数程序而言,命令行处理对性能不是很重要,而且增加的可维护性和稳健性非常值得.

  • 假设"最佳"意味着最可读和最易维护,而不是"在堆上分配的最少内存量".您正在制作本地硬拷贝,消耗的内存量超过所需内存的两倍,这只是为了提高源代码的可读性. (2认同)

fed*_*024 6

应该避免全局变量,你应该更喜欢传递参数.无论如何,你可以使用:

char **global_argv = NULL;

int main(int argc, char * argv[]){
    ...
    global_argv = argv;
    ...
}
Run Code Online (Sandbox Code Playgroud)

更好的方法是:

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)
    ...
}
Run Code Online (Sandbox Code Playgroud)