返回一个std :: string,转换为char *

时间:2019-06-19 14:38:31

标签: c++

我有一个功能,

std::string ReadShader(const std::string& filePath) {

    std::ifstream stream(filePath);
    std::string line;
    std::stringstream ss;

    while (getline(stream, line)) {

        ss << line << '\n';
    }

    return ss.str();
}

在我使用这两行代码时有效,

std::string vertexShaderString = ReadShader("Shader/Vertex_Shader.vs");
const GLchar * vertexShaderSource = vertexShaderString.c_str();

vertexShaderString包含期望的字符串,而vertexShaderSource显示期望的字符串的第一个字符。

但是,当我尝试一行代码时,即

const GLchar * vertexShaderSource = (ReadShader("Shader/Vertex_Shader.vs")).c_str();

vertexShaderString具有一致的字符行,十六进制代码为0xdd,而vertexShaderSource显示相同的0xdd第一个字符。也就是说,两者中都没有预期的字符串。

GLcharchar的OpenGL typedef。

我认为我缺少C ++基本功能。

1 个答案:

答案 0 :(得分:4)

您的第二版代码与此类似:

const GLchar * vertexShaderSource;
{
  std::string tmp = ReadShader("Shader/Vertex_Shader.vs");
  vertexShaderSource = tmp.c_str();
} // tmp is destroyed here

我希望这可以使您的指针更明显地指向std::string的内容,该内容已超出范围并释放了其内存。