Wczytywanie pliku binarnego

0

Witam,
mam taki problem, ze po wczytaniu pliku do char* albo char[] na koncu pojawiaja sie jakies dziwne zeczy.
Nie mam juz pomyslu co jest nie tak ;/.


#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, _TCHAR* argv[])
{
	//Zapisujem cos-----------------------------------------
	fstream file("a.bin",ios::binary|ios::out|ios::trunc);	//trunc- czysci plik
	if(!file.is_open())
	{	
		cout << "Pliku niet";
		cin.get();
		return 1;
	}

	file.write((char*)"bbb", 3);
	file.close();

	//Czytamy cos-------------------------------------------
	file.open("a.bin", ios::binary|ios::in);
	if(!file.is_open())
	{	
		cout << "Pliku niet";
		cin.get();
		return 1;
	}

	char* bbb1 = new char (3);
	file.read(bbb1, 3);
	cout << bbb1 << endl;

	char bbb2[3];
	file.seekg (0, ios::beg);
	file.read(bbb2, 3);
	cout << bbb2 << endl;

	bbb1 = new char (3);
	file.seekg (0, ios::beg);
	file.read((char*)bbb1, 3);
	cout << bbb1 << endl;

	file.seekg (0, ios::beg);
	file.read((char*)bbb2, 3);
	cout << bbb2 << endl;
	
	file.close();



	cin.get();
	return 0;
}


A wyjscie mniej wiecej przypomina cos takiego:

bbbýýÝÝÝ
bbbĚĚĚĚĚĚĚĚĚS9
bbbýýźźźźźźźźźź
bbbĚĚĚĚĚĚĚĚ̸Ť9
0

Bo jeśli wypisujesz na ekran char* to jest ono traktowane jako C-string, czyli ciąg znaków zakończony znakiem '\0'. W związku z tym w twoim przypadku wypisywane są wszystkie znaki aż do natrafienia na '\0'.
Rozwiązanie? Używać string, skoro to C++, albo alokować o 1 znak więcej i dopisywać '\0' na końcu.

0

No to wszystko dziala jak trza xD
DZIEKI!

poprawiony kod

	//Zapisujem cos-----------------------------------------
	fstream file("a.bin",ios::binary|ios::out|ios::trunc);	//trunc- czysci plik
	

	if(!file.is_open() )
	{	
		cout << "Pliku niet";
		cin.get();
		return 1;
	}

	file.write((char*)"bbb\0", 5);
	file.close();

	//Czytamy cos-------------------------------------------
	file.open("a.bin", ios::binary|ios::in);
	if(!file.is_open())
	{	
		cout << "Pliku niet";
		cin.get();
		return 1;
	}

	char* bbb1 = new char (5);
	file.read(bbb1, 5);
	cout << bbb1 << endl;


	char bbb2[5];
	file.seekg (0, ios::beg);
	file.read(bbb2, 5);
	cout << bbb2 << endl;



	bbb1 = new char (5);
	file.seekg (0, ios::beg);
	file.read((char*)bbb1, 5);
	cout << bbb1 << endl;
	

	file.seekg (0, ios::beg);
	file.read((char*)bbb2, 5);
	cout << bbb2 << endl;
	


	file.close();
	

	cin.get();
	return 0;

output:

bbb
bbb
bbb
bbb

1 użytkowników online, w tym zalogowanych: 0, gości: 1