c++ char*转字符串运行时错误

C++ char* to string run time error

本文关键字:字符串 运行时错误 char c++      更新时间:2023-10-16

我有这段代码:

char* mtlBuffer = readFromBinary(myfile[0]);    
string mtlBufferStr = mtlBuffer;
if (mtlBufferStr != " ")
{       
    mtlFile.open(fileLocation + "/" + mtlBufferStr.substr(7));
    if (mtlFile.is_open())
    {
        mtlFile.seekg(0, ios::end);
        mtlLength = mtlFile.tellg();
        mtlFile.seekg(0, ios::beg);
        while (mtlFile.tellg() < mtlLength)
        {
            mtlFile.getline(mtlBuffer, 255);
            mtlBufferStr = mtlBuffer;
        }
    }
}

on line:

mtlBufferStr = mtlBuffer;

我得到一个运行时错误:

Win32.exe触发断点。

这发生在malloc文件上。我已经检查了mtlBuffer存储的内容及其:

"# MTL写自/Users/manapoly/Desktop/Yusup/Models/Land/Lamborghini/Aventador/Aventador/Avent.obj"

奇怪的是,如果我删除这一行(并比较mtlBufferStr和他需要包含的值):

mtlFile。getline (mtlBuffer, 255)、

代码完美工作。为什么getLine程序失败?

抱歉我的英语不好

mtlFile.getline(mtlBuffer, 255);

看起来像是需要一个指向预分配字节缓冲区的指针。"255"可以指定缓冲区的大小。但是我在你的代码中看不到任何分配。所以我会说"getline"尝试写入非分配空间

这段代码就是问题所在。

mtlFile.getline(mtlBuffer, 255);
mtlBufferStr = mtlBuffer;

需要读入本地分配的缓冲区。例如:

char buf[255];
mtlFile.getline(buf, 255);
mtlBufferStr = buf;

mtlBuffer是指向某个内部缓冲区的指针,显然不适合重用。作为一般原则,任何时候为了不同的目的重用一个变量,都要预料到迟早会出现某种问题。