c++ - 如何将 "std::vector<std::string>"转换为 "const char* array"?

标签 c++ arrays string char

<分区>

有一个函数需要一个 const char* 数组,基本上是一个单词列表。因为这个单词列表可以改变,所以我不能在程序开始时声明和初始化这个数组。现在,我有一个字符串 vector ,我需要将其转换为一个 const char* 数组。如何才能做到这一点?谢谢!

例子:

std::vector<std::string> list;
list.push_back("word1");
list.push_back("word2"); // and so on...

const char* wordList[] = ???

最佳答案

无论如何,你都会遇到一些复杂的生命周期问题,但我认为这是最简单的方法:

std::vector<const char*> ptrs;
for (std::string const& str : list) {
  ptrs.push_back(str.data());
}

如果你需要你的const char**,你可以调用ptrs.data()。当然,问题在于 ptrslist 都必须保持事件状态才能使 ptrs.data() 有效。

另一件需要注意的事情是,如果您将更多元素push_backlist,那么list 可能会重新分配,这会使指针无效在 ptrs 中。

关于c++ - 如何将 "std::vector<std::string>"转换为 "const char* array"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54519163/

相关文章:

Javascript - 将匿名函数传递给 Promise.all

ruby - 在 Ruby 中组合 3 个并行数组的最佳和最快方法是什么

arrays - R-外带矩阵

c - 将二维字符串数组传递给函数?

带 GUI 的 Java 内存游戏 - 字符串和数组比较

c++ - 搜索遍历多个列表的项目

c++ - 如何比较限制小数位的 double 值?

c++ - 在 C++ 中自定义排序字符串

javascript - 正则表达式:排除单词,但包括非标准标点

C++ 可变参数模板返回类型