将字符串*分配给char * c ++

时间:2018-07-02 19:37:22

标签: c++ string char readfile c++98

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

    }
}

1 个答案:

答案 0 :(得分:1)

尽管std::string协议可让您访问基础内存,例如通过调用成员c_str(),这些指针都是const。如果将其强制转换为非const指针,则如果您无法控制的函数随后通过此类指针修改内容,则可能会面临不确定的行为。

从C ++ 17开始,data方法使您可以访问指向基础数据的非常量指针。

无论如何,请注意,如果有必要,字符串对象将再次替换基础内存,这超出了您的控制范围,并且指针可能随后变得无效。因此,我想说,存储指向字符串对象内容的指针通常不是一个好主意。

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.

    }
}