c++ - 将 string* 分配给 char* c++
问题描述
我需要在 C++ 中读取一个文件并保存每一行(在一个向量中),因为我稍后会处理它们。
我还需要保存一个 char* 向量,它将指向每个字符串* 的第一个位置。
问题是我不知道如何分配string*
to char*
。
仅供参考,我不能使用const char*
,它必须是char*
。
代码:
void ClassA::readFile() {
std::ifstream file("test.txt");
std::string* str = new string();
while (std::getline(file, *str))
{
_aVector.push_back(*str);
char *c = &str[0]; <-- This works if string is not declared as string*
char *c = .... <--What is the equivalent for string*
str = new string();
someFunction(c); <-- This function saves the *c in a vector.
}
}
解决方案
尽管该std::string
协议允许您访问底层内存,例如通过调用 member c_str()
,但这些指针都是const
. 如果将其转换为非常量指针,如果超出您控制范围的函数随后通过此类指针修改内容,则您将面临未定义行为的风险。
从 C++17 开始,data
-方法使您可以访问指向基础数据的非常量指针。
无论如何,请注意,如果需要,字符串对象将 - 再次超出您的控制 - 替换底层内存,然后您的指针可能会变得无效。所以我想说存储指向字符串对象内容的指针通常不是一个好主意。
char*
获得指向我看到的内容的 -pointer的唯一方法std::string
是复制字符串的内容,例如使用strdup
. 因此,您可以避免意外修改访问的未定义行为,并且您可以将其char*
与字符串对象管理的内存分离。
请参阅以下代码说明这一点:
int main() {
std::vector<std::string> aVector;
std::ifstream file("test.txt");
std::string str;
while (std::getline(file, str))
{
aVector.push_back(str);
char *c = strdup(str.c_str());
someFunction(c); // <-- This function saves the *c in a vector.
}
}
推荐阅读
- javascript - 引导导航栏:登录时注销按钮和用户名的位置
- algorithm - 分解字符串以形成有效的表达式
- java - SpringBoot 2 - 监控数据库连接
- c# - 登录时会话过期错误
- python - 使用张量、lambda 和 python 变量绑定自定义学习率衰减
- css - 如何将 sass 和 scss 与 webpack 混合使用?
- react-native - React Native 的导航库
- facet-wrap - 如何在 iNext 函数中更改 facet.var 的字母顺序?
- exoplayer - 如何在 google IO18 audio App demo 中添加播放器控制 ui
- android - 没有overlayColor的Android GIF边框半径