从文件读取时字符串损坏

埃德·雷内斯托(EduRenesto)

我正在使用OpenGL做一些实验,并且正在尝试加载着色器。它需要const char *中的源,但是由于我是在C ++上执行的,因此我可以使用std :: strings然后调用str.c_str()。那不是问题-当我尝试读取文件时,它读起来很完美,但是返回的值是损坏的字符串。这是代码的相关部分:

// inline method on engine.hpp
inline void readFile(std::string filePath, std::string* retValue) 
{
std::ifstream file;
file.open(filePath);

std::string result;

std::string line;
while (!file.eof())
{
    std::getline(file, line);
    result.append(line + "\n");
}

    memcpy(retValue, &result, sizeof(result));
}

// implemented method on engine.cpp
GLint Engine::createShader(std::string vs, std::string fs)
{
GLuint vertex = glCreateShader(GL_VERTEX_SHADER);
GLuint fragment = glCreateShader(GL_FRAGMENT_SHADER);

std::string vsSourceStr = "";
std::string fsSourceStr = "";

readFile(vs, &vsSourceStr);
readFile(fs, &fsSourceStr);

const char* vsSource = vsSourceStr.c_str();
const char* fsSource = fsSourceStr.c_str();

//std::string t_vs = readFile(vs);

//const char* vsSource = readFile(vs).c_str();
//const char* fsSource = readFile(fs).c_str();

glShaderSource(vertex, 1, &vsSource, NULL);
glCompileShader(vertex);

glShaderSource(fragment, 1, &fsSource, NULL);
glCompileShader(fragment);

GLint program = glCreateProgram();
glAttachShader(program, vertex);
glAttachShader(program, fragment);
glLinkProgram(program);

if (shaderCompiled(program))
{
    std::cout << "shader successfully compiled" << std::endl;
}
else
{       
    std::cout << "shader not compiled" << std::endl;
    printShaderError(vertex);
    printShaderError(fragment);

    std::cout << "Vertex Shader source:" << std::endl;
    std::cout << vsSource << std::endl;

    std::cout << "Fragment Shader source:" << std::endl;
    std::cout << fsSource << std::endl;
}

return program;
}

这是Visual Studio在调试时所说的:http : //prntscr.com/4qlnx7

它完美地读取文件,只是使返回值崩溃。我已经尝试过使用引用和复制内存来返回结果,正如您在我的代码中看到的那样。不管怎么说,还是要谢谢你。

加利克

这不会按照您的想法进行:

std::string line;
while (!file.eof())
{
    std::getline(file, line);
    result.append(line + "\n");
}

请用:

std::string line;
while (std::getline(file, line))
{
    result.append(line + "\n");
}

原因是eof()直到读取文件后才触发。这意味着您std::getline()可能已经失败(在EOF时),并且您正在使用该错误数据。

请参阅: C ++ FAQ 15.5有关eof()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从文件读取时字符串损坏

来自分类Dev

从CSV读取DataFrame时韩文字符串损坏

来自分类Dev

从文件中读取随机字符串时出错

来自分类Dev

从文件读取时在Shell脚本中拆分字符串

来自分类Dev

逐行读取文件时如何跳过字符串

来自分类Dev

从文件读取时重复字符串但不返回整数

来自分类Dev

从文件读取时如何跳过字符串中的空格

来自分类Dev

运行读取文件时返回字符串的命令

来自分类Dev

从文件中读取随机字符串时出错

来自分类Dev

如何拆分从文件读取的字符串

来自分类Dev

从文件C ++读取字符串

来自分类Dev

从文件读取带空格的字符串

来自分类Dev

从.INI文件读取连接字符串

来自分类Dev

从.ini文件读取连接字符串

来自分类Dev

C ++:从文件/解析字符串读取

来自分类Dev

从外部文件读取连接字符串

来自分类Dev

比较从csv文件读取的字符串

来自分类Dev

从文件中读取字符串

来自分类Dev

读取文件到字符串(python)

来自分类Dev

如何从指定的字符串读取文件?

来自分类Dev

写入Oracle DB时字符串损坏

来自分类Dev

写入Oracle DB时字符串损坏

来自分类Dev

将文本文件的内容读取到字符串时,字符无效

来自分类Dev

java.lang.NumberFormatException:使用扫描仪读取文件时用于输入字符串

来自分类Dev

从文件中读取字符串时,String.split不会与\ n分开

来自分类Dev

Python在读取文件时何时解码字节字符串?

来自分类Dev

从文件(C#)读取时,Number拒绝从字符串转换为int

来自分类Dev

读取CSV文件时如何将字符串值转换为整数值?

来自分类Dev

从文本文件读取时如何比较单独行中的字符串

Related 相关文章

热门标签

归档