如何将一个数组的部分复制到另一个数组中
How to copy portions of an array into another array
早上好!我需要将一个数组的一部分复制到另一个数组中,从位置2开始,并消耗所有剩余的值。第一个数组是类型为'char**'的'argv'数组,但第二个数组需要类型为'const char*'。在c++ - std中,似乎有两种方法可以做到这一点:复制和内存。既然这两个数组的类型不同,那么哪一个处理这种情况会更好呢?
还是我误解了你的问题?你有一个字符串包含空格分隔的"参数",并应该创建一个argv风格的数组?
那么我建议将std::copy
与std::istringstream
, std::istream_iterator
和std::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));
生活例子。
相关文章:
- 在c++中为double类型的数组创建一个unique_ptr
- 从数组构造一个跨度<shared_ptr<T>><shared_ptr<void>>
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 如何将 v8::FunctionCallbackInfo<v8::Value> 数组从一个隔离复制到另一个隔离?
- 我怎么能有一个以2D数组为参数的函数,而数组有一个我想更改的参数/维度
- 为什么我的数组输出一个不在其中的元素
- 数组 - 最后一个索引
- 将数组作为一个参数从一个函数传递到C 中的另一个函数
- 从字符串数组创建一个字符数组
- 如何在C 中的小写中将文本从数组的一个维度传递到另一个维度
- 在对结构数组的一个成员进行排序后,移动其成员的其余部分
- 为什么数组在一个文件中打印,但在发送到另一个文件时却缺少数字
- C++,为什么多维数组的一个元素的增加似乎增加了另一个元素
- 将数组的一个元素与整个数组元素进行比较
- 如何将数组从一个函数传递到另一个函数
- 查找最大和连续子数组-另一个版本
- 使用for循环将char数组的一个元素复制到另一个元素
- C++如何将变量char数组从一个函数传递到另一个函数
- 数组 ->另一个空的 int 数组混淆
- 用另一个字符数组替换一个字符数组