假设我想打开一个函数(它打开一个文件,用它做一些事情,然后将结果吐出到另一个文件)。使用 argv 和 argc,并通过在线阅读所有教程,我假设如果我打印 argv[0],我会得到文件名。我的问题是我如何设置让我们说下一个 argv[1.2.n] 到一个函数。因此,如果用户输入 open (在用户进入程序目录之后),它将打开该函数。就像是:
void file();
...
if (argv[1] == open){
file();
}
argv 中的第一个字符串不是第一个命令行参数,它通常是 exe 的路径。我建议将命令行参数放在一个简单的数据结构中。
vector<string> args(argv, argv + argc);
现在您可以将向量传递给您的函数。
目前还不清楚你在问什么。如果目标是根据参数之一调用不同的函数,通常的解决方案是使用字符串映射到函数指针,然后执行以下操作:
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)();
}
将参数传递给您的函数:
void file(int * argc, char * * argv)
{
//
}
int main(int argc, char * * argv)
{
if (argv[1] == open)
{
file(argc, argv);
}
return 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
}
}