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

Returning a std::string, converting to char*

本文关键字:string 转换 char std 一个 返回      更新时间:2023-10-16

我有一个函数,

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第一个字符。 也就是说,两者都没有预期的字符串。

GLchar 是一个用于 char 的 OpenGL typedef

我认为我缺少一个C++基本的东西。

您的第二个代码版本类似于以下内容:

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

我希望这能更明显地表明您的指针指的是超出范围并释放其内存的std::string的内容。