如何将一个数组的部分复制到另一个数组中

How to copy portions of an array into another array

本文关键字:数组 另一个 复制 一个      更新时间:2023-10-16

早上好!我需要将一个数组的一部分复制到另一个数组中,从位置2开始,并消耗所有剩余的值。第一个数组是类型为'char**'的'argv'数组,但第二个数组需要类型为'const char*'。在c++ - std中,似乎有两种方法可以做到这一点:复制和内存。既然这两个数组的类型不同,那么哪一个处理这种情况会更好呢?

还是我误解了你的问题?你有一个字符串包含空格分隔的"参数",并应该创建一个argv风格的数组?

那么我建议将std::copystd::istringstream, std::istream_iteratorstd::back_inserter一起使用,如下所示:

std::vector<std::string> args;
std::istringstream istr(string_containing_args);
std::copy(std::istream_iterator<std::string>(istr),
          std::istream_iterator<std::string>(),
          std::back_inserter(args));

现在您有一个字符串向量,类似于argv数组。这里的问题是,你似乎想要一个适当的argv风格的数组,传递到例如execv。这可以通过将vector转换为另一个vector来实现:

std::vector<const char*> execv_args(args.size());
std::transform(std::begin(args), std::end(args),
               std::begin(execv_args),
               [](const std::string& s){ return s.c_str(); });
execv_args.push_back(nullptr);

重要提示:args向量的生存期必须超过execv_args数组的生存期,否则指针将无效。

现在最终的向量可以这样使用,例如

execv(execv_args[0], &execv_args[1]);

在c++中使用memcpy()的理由很少。如果我理解你的问题是正确的,这里有一个如何使用std::copy()的例子。

vector<char*> args(argc - 2);
copy(argv + 2, argv + argc, begin(args));

生活例子。