[英]Returning a std::string, converting to char*
我有一个功能
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
的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.