Я просто пытаюсь прочитать файл с помощью fread и вывести его содержимое. Частично работает. Он выводит все правильно, но заканчивается кучей случайных символов.
#include <iostream>
using namespace std;
void ReadFile(char* filename,char*& buffer)
{
FILE *file = fopen(filename,"rb");
fseek(file,0,SEEK_END);
int size = ftell(file);
rewind(file);
buffer = new char[size];
memset(buffer,0,size);
int r = fread(buffer,1,size,file);
cout << buffer;
fclose(file);
}
int main()
{
char* buffer;
ReadFile("test.txt",buffer);
cin.get();
}
Скажем, в данном случае «размер» равен 50. по какой-то причине размер буфера достигает 55 или 56 после вызова fread. Я очистил буфер перед его использованием и попробовал вывести его, все в норме (он пуст). Сразу после вызова fread буфер как-то становится больше и заполняется случайными символами. Я открыл текстовый файл в шестнадцатеричном редакторе, чтобы убедиться, что я ничего не вижу, но нет. Размер файла 50 байт. fread возвращает количество прочитанных байтов, в данном случае возвращается в 'r', 'r' - это то, что должно быть. так откуда мать эти байты берутся?
упрощено: fread возвращает правильное количество прочитанных байтов, но буфер каким-то образом становится больше после вызова fread, а затем заполняет его случайными символами. Зачем?
Я хоть убей не могу понять, как это происходит.
Кроме того, прежде чем кто-либо предложит мне простое решение, я уже знаю, что могу просто сделать buffer [r] = '\ 0' и больше не выводить случайные символы, но я бы лучше знал, ПОЧЕМУ это происходит.
std::string buffer(size);
. - person Casey   schedule 17.07.2013fread()
- это C.fstream
- это C ++. Не смешивайте их. Кроме того, выabusing namespace std;
, чего не стоит. - person   schedule 17.07.2013