将(argc,argv)变量传递给C ++中main(argv,argc)中的函数

时间:2014-09-06 07:27:08

标签: c++

我正在使用库中的函数来调用主程序中的(argc,argv)命令行函数直接传递给它;但是,我只想传递一些参数,其余的在主代码中进行评估而不是函数。下面是一个带有评估参数的主代码示例。

int main(int argc,char** argv)
{
     // Evaluate arguments
if ( argc > 9 ) {
    PrintUsage();
    return 1;
}
G4String input;
G4String macro;
G4String physicslist;
for ( G4int i=1; i<argc; i=i+2 ) {
    if      ( G4String(argv[i]) == "-i" ) macro = argv[i+1];
    else if ( G4String(argv[i]) == "-l" ) physicslist = argv[i+1];
    else if ( G4String(argv[i]) == "-g" ) input = argv[i+1];
    else if //pass the rest of the arguments to function below
  G4MPImanager* g4MPI = new G4MPImanager(argc,argv);

上面未评估的任何其他参数我想从外部库传递给函数,这需要如图所示进行调用。

谢谢!

3 个答案:

答案 0 :(得分:2)

argv只是一个由最终NULL指针终止的char指针数组。您可以使用my_argv = new char *[number_of_items + 1]创建自己的number_of_items,其中argv是您要从“真实”G4MPIManager(或您自己的字符串)中挑选的参数数量。此类数组可以传递给argv构造函数,而不是main()中收到的实际argv

附加说明:

  • 不要忘记使用NULL指针终止argv

  • argv[0]的第一个成员argv[0]将保留“程序名称”,因此将被忽略或仅用于为诊断消息添加前缀。只需重复使用main()获得的argc

  • argv[argc] == NULL应该是number_of_items,即与上面的argv相同。鉴于argc数组必须包含程序名称作为第一个成员,{{1}}将永远不会为0.

答案 1 :(得分:2)

创建一个字符串向量 从矢量中删除不需要的参数 然后,您可以非常轻松地从向量中创建char*[](大小非常简单)。

 int main(int argc, char* argv[])
 {
      std::vector<char*>  args(argv, argv+argc+1);  // +1 to catch the last NULL at argv[argc]

      for(auto loop = args.begin(); loop != args.end();)
      {
          if      (/*Your Test 1 */) { /*STUFF 1*/ loop = args.erase(loop);}
          else if (/*Your Test 2 */) { /*STUFF 2*/ loop = args.erase(loop);}
          else                       { ++loop; /* If you did not remove it increment loop*/ }
      }
      // args.size() -1 becuase we have the extra NULL as the last argument.
      //             and argv[arc] should be null
      // &args[0]    is the address of the first member.
      //             vector keeps its data in contiguous memory so will look like an array
      G4MPImanager* g4MPI = new G4MPImanager(args.size() - 1, &args[0]);
 }

答案 2 :(得分:0)

你必须为你的i构建一对新的argc和argv,然后将它传递给你的函数。

int newArgc = argc - i;
char** newArgv = &argv[i];
G4MPImanager* g4MPI = new G4MPImanager(newArgc, newArgv);