C++像Java这样的命令行字符串

C++ command line strings like Java?

本文关键字:命令行 字符串 Java C++      更新时间:2023-10-16

有没有办法像在 Java 中那样从命令行获取 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 等。所有设施均配有此类设施。

您可以使用向量将 char 数组转换为字符串。

#include <vector>
#include <string>
using namespace std;
int main (int argc, char** argv)
{
    vector <string> args (argv, argv + argc);
}

是的,主函数可以接受 2 个参数

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
}

在 C 中,您的主函数签名如下所示:

int main(int argc, char** argv) .

argc包含命令行传入的参数数。可执行文件的名称位于位置 0,并将 1 添加到 argc

argv 包含包含参数的字符串数组。同样,位置 0 是可执行文件的名称。

标准的C++ main()签名是

int main(int argc, char* argv[])

其中argc表示命令行参数的计数,argv[]是保存命令行参数的原始 C 字符串数组。 argv[0] 是可执行文件,从命令行调用。

如果你正在编写一个win32应用程序,你可以使用GetCommandLineW http://msdn.microsoft.com/en-us/library/ms683156(VS.85).aspx和CommandLineToArgW http://msdn.microsoft.com/en-us/library/bb776391(VS.85).aspx

CommandLineToArg 页面上有一条关于特殊处理的评论,如果可执行文件在路径中有空格并且没有您可能必须处理的参数,则需要特殊处理。