0

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

  void file();

...

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

4 回答 4

1

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

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

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

于 2013-10-11T13:35:05.553 回答
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)();
}
于 2013-10-11T13:51:31.783 回答
0

将参数传递给您的函数:

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

int main(int argc, char * * argv)
{
  if (argv[1] == open)
  {
     file(argc, argv);
  }
  return 0;
}
于 2013-10-11T13:34:40.943 回答
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
        }
}
于 2013-10-11T13:42:14.457 回答