将字符串*分配给char * c ++ [关闭]

问题描述 投票:-4回答:1

我需要用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.

    }
}
c++ string char readfile c++98
1个回答
1
投票

虽然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.

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.