string.c_str()输出乱码 - 但有时只输出

时间:2017-01-26 13:56:08

标签: c++

我正在编写一个简短的OpenGL程序,需要导入着色器源代码,我使用以下代码(OpenGL希望着色器源代码为c-string):

    std::ifstream t("GLshader.vert");
    if (!t.is_open()) {
        std::cerr << "vertex shader open failed" << std::endl;
    }
    std::stringstream buffer;
    buffer << t.rdbuf();


    const char* source = buffer.str().c_str();
    std::string s = buffer.str().c_str();
    std::cerr << "vs string :" << std::endl << s << std::endl;
    std::cerr << "vs source:" << std::endl << source << std::endl;

我真正难过的是有时一切都很好,最后两行代码输出相同的文字。 有时但是,出于某种原因,输出是这样的:

vs string:
/* actual shader code*/
#version 330 core

layout(location=0) in vec3 position;

out vec3 pos;
out vec2 texcoord;

void main(){
  pos = position;
  texcoord = (position.xy +1.f) / 2.f;
  gl_Position = vec4(position, 1.0f);
}

vs source:
@ð4

打印输出以及字符串是因为我不断得到着色器编译错误(再次,有时),并且认为读取文件可能是一些奇怪的并发问题。显然它工作正常,但由于某种原因,c字符串创建有时会失败。

该函数在.dll中调用,我正在使用visual studio。 (我在VS之外运行.exe,问题也出现在那里)

我真的没有想法,有人有答案吗?

0 个答案:

没有答案