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