为函数分配命令行参数

时间:2013-10-11 13:30:34

标签: c++ function void argv argc

让我们说我想打开一个函数(它打开一个文件,用它做一些事情,然后将结果吐出到另一个文件)。使用argv和argc,并通过在线浏览所有教程,我假设如果我打印argv [0]我得到文件名。 我的问题是如何设置让我们说下一个argv [1.2.n]到一个函数。因此,如果用户输入open(在用户位于程序目录之后),它将打开该功能。 类似的东西:

  void file();

...

  if (argv[1] == open){
            file();
         }

4 个答案:

答案 0 :(得分:1)

argv中的第一个字符串不是第一个命令行参数,它通常是exe的路径。我建议将命令行参数放在一个简单的数据结构中。

vector<string> args(argv, argv + argc);

现在您可以将矢量传递给您的函数。

答案 1 :(得分:0)

将参数传递给您的函数:

void file(int * argc, char * * argv)
{
    //
}

int main(int argc, char * * argv)
{
  if (argv[1] == open)
  {
     file(argc, argv);
  }
  return 0;
}

答案 2 :(得分:0)

argv的类型为char*[](char *指针数组)。您无法直接比较需要引用的字符串常量(类型char*)。相反,我建议你将它转换为c ++字符串类型:

#include <string>

void file(){   
     // ...
}

int main(int argc, char *argv[]) {
        if(argc>=2)
        {
                if(std::string(argv[1]) == "open")
                {
                        file();
                }

        }
        else
        {
                // print usage
        }
}

答案 3 :(得分:0)

你所要求的并不是很清楚。如果目标是 根据其中一个参数调用不同的函数 通常的解决方案是使用字符串映射到指针 函数,然后执行以下操作:

MapType::const_iterator entry = map.find( argv[1] );
if ( entry == map.end() ) {
    std::cerr << "Unknown function " << argv[1] << std::endl;
    returnCode = 1;
} else {
    (*entry->second)();
}