Mam pytanie dotyczące prostego wczytywania danych z pliku i wyrzucania ich na ekran:
// reading an entire binary file
#include <iostream>
#include <fstream>
using namespace std;
int main () {
streampos size;
char * memblock;
ifstream file ("example.bin", ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
cout << "the entire file content is in memory" << endl;
cout << memblock << endl;;
delete[] memblock;
}
else cout << "Unable to open file";
return 0;
}
Powyższy kod jest skopiowany z tutoriala (http://www.cplusplus.com/doc/tutorial/files/).
Dodałem tylko linijkę wypisywania na ekran:
cout << memblock << endl;
Zawsze wypisuje mi o 1 znak więcej niż ma size, wywala jakieś śmieci. Rozumiem, że on wczytuje zawsze size + 1 jako miejsce na znak końca pliku i później nie ma sprawdzania tego w cout i wywala cały bufor, dobrze rozumiem?
Jak za pomocą cout wypisać bufor z takim rozmiarem jak size? Wiem że mogę sobie ostatni znak urwać za pomocą pętli ale po co do tego zaprzęgać pętlę?