如何解决将vector <char *>转换为char **数组?
我正在尝试将vector
char **parse(vector<string> arr){
vector<char*> res;
for(int i = 1; i < arr.size(); i++){
string s = arr.at(i);
char temp[s.length() + 1];
s.copy(temp,s.length()+1);
temp[s.length()] = '\0';
res.push_back(temp);
}
res.push_back(NULL);
char **parsed = res.data();
cout << parsed[0] << endl;
return parsed;
}
解决方法
仅调用标题为vector<char*>.data()
的标题似乎是最直接的方法:
#include <type_traits>
#include <vector>
int main()
{
std::vector<char*> chars{};
static_assert(std::is_same_v<char**,decltype(chars.data())>);
}
,
这似乎是一个非常复杂的方法:
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>
std::vector<const char*> to_ptrs(const std::vector<std::string>& arr) {
std::vector<const char*> res;
for (auto& s : arr) {
res.emplace_back(s.c_str());
}
return res;
}
int main() {
std::vector<std::string> input = {
"test","example","of","strings"
};
auto ptr_vec = to_ptrs(input); // To avoid dangling temporary
const char** result = ptr_vec.data();
for (size_t i = 0; i < input.size(); ++i) {
std::cout << result[i] << std::endl;
}
return 0;
}
或者如果您更喜欢使用std::transform
的C ++ 20解决方案:
std::vector<const char*> to_ptrs(const std::vector<std::string>& arr) {
std::vector<const char*> res;
std::transform(arr.begin(),arr.end(),std::back_inserter(res),[](const std::string& s) -> const char* { return s.c_str(); });
return res;
}
无法将笔记转换为char**
,因为c_str()
的结果为const char*
。
注意:对原始字符串或字符串数据的任何更改都会使这些指针无效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。