//this is where confusion begins
ОК, так что давайте начнем здесь:
file.read((char*)memblock, size);
Это говорит ifstream
о необходимости прочитать определенное количество (size
) байтов в некоторой памятибуфер, который вы указываете как указатель (memblock
).
Однако, read
принимает указатель на char
, но буфер был создан как unsigned char
, поэтому мы приводим.
cout << memblock << endl;
выведет содержимое файла, который вы только что прочитали. На самом деле, он будет печатать только до появления первого нулевого символа, поэтому он может обрезать содержимое файла. Однако, если файл вообще не содержит нулевого символа, вы получите неопределенное поведение, так как operator<<
затем будет читать за пределами буфера.