C++命令行字符串像Java一样吗?

4
有没有办法像Java那样从命令行获取C++字符串?
public static void main(String[] args)

参数“args”是一个C++字符串数组?

7个回答

11

不是非常准确,但你可以很容易地接近。

#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等。


将所有参数复制到 std::vector 中的目的是什么?同样的循环也可以直接遍历 argv - sbi
@sbi - 关键是它回答了提问者的问题。他想要实现的目标最好由提问者来指导。 - Duck
1
这是无稽之谈。索引到 argv 中同样可以回答 Sean 的问题。他并没有问如何将这些参数放入向量中。你只是向他展示了一个不必要的绕路。 - sbi
1
他明确写道:“其中args是一个C++字符串数组”,而不是C字符串。 - Duck
那个typedef有什么意义呢?如果你问我,它只会使代码变得更加晦涩。 - Jasper

11
你可以使用一个向量将字符数组转换为字符串。
#include <vector>
#include <string>
using namespace std;

int main (int argc, char** argv)
{
    vector <string> args (argv, argv + argc);
}

如果不是用了 using namespace std,我会点赞的。 - sbi
1
@sbi 在 .cpp 文件中进行这样的操作并不一定是坏事。如果这是一个头文件或者比一个函数更复杂的东西,我可能会同意你的看法。他并没有同时使用 Boost 或其他大型库,因此名称冲突不应该是一个问题。 - xDD
这并不是将参数传递给C++程序的标准方式。 - Pepe
@xDD:即使在cpp文件中,我也不同意。我提供了一个链接来解释为什么我这么想。 - sbi
@Sevis:确实!我忽略了那个。我进去修复了这个问题。这不像其他问题那样有争议。 - sbi

3

是的,主函数可以带两个参数。

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

argc代表参数数量,argv包含参数列表。

例如,如果您以以下方式运行程序:

MyProgram.exe hello

然后。
argc = 2
argv[0] = MyProgram.exe
argv[1] = "hello"

1
不是语言内建的,但很容易实现:
#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
}

1
你不需要那个循环,std::vector有一个很好的构造函数可以完成这个任务。 - sbi
@sbi 我知道,但是原始提问者可能更容易理解我的代码。 - user2100815
你可以简单地使用:std::vector<string> args(argv, argv+argc); - Nawaz
@Nawaz这不就是@sbi刚才说的吗?我已经回复过了。 - user2100815

0

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

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

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


0
在 C 语言中,主函数的签名看起来像这样:
int main(int argc, char** argv)。
argc 包含通过命令行传递的参数数量。可执行文件的名称位于位置 0,并将其加一到 argc 中。
argv 包含一个字符串数组,其中包含参数。同样,位置 0 是可执行文件的名称。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接