簡體   English   中英

返回一個std :: string,轉換為char *

[英]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第一個字符。 也就是說,在任何一個中都沒有期望的字符串。

GLcharchar的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM