C файл читает листовые посторонние символы

Я пытаюсь считать содержание файла в мою программу, но я иногда продолжаю получать посторонние символы в конце буферов. Я не использовал C много (скорее, я использовал C++), но я предполагаю, что он имеет некоторое отношение к потокам. Я действительно не знаю, что сделать все же. Я использую MinGW.

Вот код (это дает мне мусор в конце второго чтения):

#include 
#include 

char* filetobuf(char *file)
{
    FILE *fptr;
    long length;
    char *buf;

    fptr = fopen(file, "r"); /* Open file for reading */
    if (!fptr) /* Return NULL on failure */
        return NULL;
    fseek(fptr, 0, SEEK_END); /* Seek to the end of the file */
    length = ftell(fptr); /* Find out how many bytes into the file we are */
    buf = (char*)malloc(length+1); /* Allocate a buffer for the entire length of the file and a null terminator */
    fseek(fptr, 0, SEEK_SET); /* Go back to the beginning of the file */
    fread(buf, length, 1, fptr); /* Read the contents of the file in to the buffer */
    fclose(fptr); /* Close the file */
    buf[length] = 0; /* Null terminator */

    return buf; /* Return the buffer */
}

int main()
{
 char* vs;
 char* fs;

 vs = filetobuf("testshader.vs");
 fs = filetobuf("testshader.fs");

 printf("%s\n\n\n%s", vs, fs);

 free(vs);
 free(fs);

 return 0;
}

Функцией filetobuf является от этого примера http://www.opengl.org/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_%28C_/_SDL%29. Это кажется правильным мне все же.

Так так или иначе, что произошло с этим?

1
задан Eli Bendersky 22 April 2010 в 13:33
поделиться

2 ответа

Вам нужно очистить буфер - malloc этого не делает. Попробуйте вместо этого использовать calloc или memset для создания буфера, чтобы он начинался с чистого листа.

1
ответ дан 3 September 2019 в 01:06
поделиться

Использовать fopen (...., "rb") вместо (..., "r"); Открывает файл в "двоичном" режиме под Windows.

1
ответ дан 3 September 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: