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

时间:2015-08-26 17:58:17

标签: c++ arrays

早上好!我需要将一个数组的一部分复制到另一个数组中,从第2位开始并消耗所有剩余的值。第一个阵列是' argv'数组' char **'但第二个数组必须是#char; const char *'类型。看来在C ++中有两种方法可以做到这一点 - std:copy和memcpy。哪个处理这种情况会更好,因为两个数组的类型不同,示例是什么样的?

2 个答案:

答案 0 :(得分:0)

或者我误解了你的问题?你有一个包含空格分隔的“参数”的字符串,并且应该创建一个argv样式的数组?

然后我建议将std::copystd::istringstreamstd::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。这可以通过transforming向量到另一个向量中来完成:

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]);

答案 1 :(得分:-1)

在C ++中使用memcpy()的理由很少。如果我理解你正确提出的问题,这里有一个如何使用std::copy()进行操作的示例。

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

Live example