有没有办法像Java那样从命令行获取C++字符串?
public static void main(String[] args)
参数“args”是一个C++字符串数组?
public static void main(String[] args)
参数“args”是一个C++字符串数组?
不是非常准确,但你可以很容易地接近。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
typedef vector<string> CommandLineStringArgs;
int main(int argc, char *argv[])
{
CommandLineStringArgs cmdlineStringArgs(&argv[0], &argv[0 + argc]);
for (int i = 0; i < cmdlineStringArgs.size(); ++i)
{
cout << cmdlineStringArgs[i] << endl;
}
return 0;
}
这里只是使用了std :: vector的重载构造函数,该构造函数接受一个开始/结束迭代器对来将命令行参数复制到向量中。从那里开始,它与Java基本相同。
您也可以围绕该向量构建对象,并提供实用程序方法来转换参数,但几乎没有意义。此外,有很多包含处理解释命令行开关等功能的对象的软件包,例如ACE、POCO、QT等。
#include <vector>
#include <string>
using namespace std;
int main (int argc, char** argv)
{
vector <string> args (argv, argv + argc);
}
using namespace std
,我会点赞的。 - sbi是的,主函数可以带两个参数。
int main(int argc, char* argv[])
argc
代表参数数量,argv
包含参数列表。
例如,如果您以以下方式运行程序:
MyProgram.exe hello
argc = 2
argv[0] = MyProgram.exe
argv[1] = "hello"
#include <vector>
#include <string>
using namespace std;
int main( int argc, char *argv[] ) {
vector <string> args;
for ( int i = 0; i < argc; i++ ) {
args.push_back( argv[i] );
}
// do something with args
}
std::vector
有一个很好的构造函数可以完成这个任务。 - sbistd::vector<string> args(argv, argv+argc);
。 - Nawaz标准的C++ main()
签名是
int main(int argc, char* argv[])
argc
表示命令行参数的数量,argv[]
是一个原始的C字符串数组,保存着这些命令行参数。argv[0]
是可执行文件,从命令行中调用。
如果你在编写win32应用程序,你可以使用GetCommandLineWhttp://msdn.microsoft.com/en-us/library/ms683156(VS.85).aspx和CommandLineToArgW http://msdn.microsoft.com/en-us/library/bb776391(VS.85).aspx
在CommandLineToArg页面上有一个关于特殊处理的注释,如果你的可执行文件路径中有空格且没有参数需要处理,则需要进行特殊处理。
std::vector
中的目的是什么?同样的循环也可以直接遍历argv
。 - sbiargv
中同样可以回答 Sean 的问题。他并没有问如何将这些参数放入向量中。你只是向他展示了一个不必要的绕路。 - sbitypedef
有什么意义呢?如果你问我,它只会使代码变得更加晦涩。 - Jasper