将字符串*分配给char * c ++ [关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字符串*分配给char * c ++ [关闭]相关的知识,希望对你有一定的参考价值。
我需要用c ++读取一个文件并保存每一行(在向量中),因为我将在以后处理它们。
我还需要保存一个char *向量,它将指向每个字符串*的第一个位置。
问题是我不知道如何将string*
分配给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
协议允许您访问底层内存,例如通过调用成员c_str()
,这些指针都是const
。如果将其强制转换为非const指针,如果超出控件的函数然后通过这样的指针修改内容,则存在未定义的行为风险。
从C ++ 17开始,data
方法允许您访问指向底层数据的非const指针。
无论如何,请注意,字符串对象将再次超出您的控制范围 - 必要时替换底层内存,然后您的指针可能变得无效。所以我要说存储指向字符串对象内容的指针通常不是一个好主意。
获得char*
指针到我所看到的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.
}
}
以上是关于将字符串*分配给char * c ++ [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
想要使用 if 条件分配 char 值 - C 语言 [关闭]