这段代码实际上是做什么的

时间:2016-04-13 21:37:15

标签: c++

每个人似乎都同意这是将命令行char数组转换为字符串的正确方法。

    vector<std::string> params(argv+1, argv+argc);

但我并不真正理解这里发生了什么,因为当我尝试打印argv [1]时,它只是字符串的第一个字母。这里到底发生了什么是什么类型的指针数学引导你到其余的数据我只是确定如何向argv添加2(argc的值)能够获得该数组中的所有字符仅用于那一个参数

例如像这样打印argv [1]

cout << *argv[1];

返回t,它是第二个参数的第一个字母,即test.txt。

感谢弗雷德指出这一点

cout << argv[1];

确实会返回整个字符串,但我没办法测试

cout << argv + argc;

并在参数之间移动。

1 个答案:

答案 0 :(得分:5)

看起来代码是使用命令行中的标记填充向量。

代码正在使用the std::vector constructor for sequences并将 iterator 传递给第一个参数(在程序名称之后),并且传递给命令行中的最后一个参数。

要验证,请尝试以下操作:

for (unsigned int i = 0; i < argc; ++i)
{
  std::cout << "Argument [" << i << "]: " << argv[i] << std::endl;
}
std::cout << "\nFrom vector:\n"
for (unsigned int j = 0; j < params.size(); ++j)
{
  std::cout << "params[" << j << "]: " << params[j] << "\n";
}