问题描述
文件读取函数:
char* readBytesFile(char* path) { FILE* file = NULL; file = fopen(path, 'rb'); fseek(file, 0, SEEK_END); int size = ftell(file); rewind(file); char* bytes = (char*) malloc(sizeof(char) * size); if (fread(bytes, size, 1, file) != 1) {fprintf(stderr, 'ERROR::Filed to read file!n');free(bytes);bytes = NULL; }fprintf(stderr, 'nn%sn%snn', path, bytes); fflush(file); fclose(file); return bytes;}
使用readBytesFile的函数:
GLuint loadShader(char* path) { char* source = readBytesFile(path); int offset = strlen(path) - 5; GLenum glShaderType; if (strcmp(path + offset, '.vert') == 0) {glShaderType = GL_VERTEX_SHADER;#ifdef _INFO_TYPE_fprintf(stdout, 'SHADER::TYPE:GL_VERTEX_SHADERn');#endif } else if (strcmp(path + offset, '.frag') == 0) {glShaderType = GL_FRAGMENT_SHADER;#ifdef _INFO_TYPE_fprintf(stdout, 'SHADER::TYPE:GL_FRAGMENT_SHADERn');#endif } GLuint shader; shader = glCreateShader(glShaderType); glShaderSource(shader, 1, &source, NULL); glCompileShader(shader); check_shader_error(shader); free(source); return shader;}
调用
loadShader('shader.vert');loadShader('shader.frag');
读取到的文件内容第一个没问题。第二个末尾有一串乱码。一直解决不了。求教。
问题解答
回答1:你没有对申请有内存进行初始化。也就是没有把内存memset
回答2:读取的时候多分配一个字节,读完之后在末尾置’0’