答案 0 :(得分:0)
或者我误解了你的问题?你有一个包含空格分隔的“参数”的字符串,并且应该创建一个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
。这可以通过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));