Zapis struktury do pliku

0

Cześć, kolejna walka z ćwiczeniami.
Tym razem zapis struktury do pliku z użyciem fstream i metod write i read.

Coś nie idzie i nie wiem dlaczego. Moja struktura jest prosta:

 
struct Person
{
	size_t m_ssn;
	int m_age;
	wchar_t m_firstName[100];
	wchar_t m_lastName[100];
};

Zapisuję do pliku tak:

 
void add(const Person & p)
{
	wofstream out(DB_FILE_NAME, ios::app | ios::binary);
	out.write((wchar_t *)&p, sizeof(Person) * sizeof(wchar_t));
	out.close();
}

Niestety do pliku nie zapisuje się m_lastName. Czemu?

2

Jesteś pewien, że się nie zapisuje? http://melpon.org/wandbox/permlink/BSMYr4i2FE12n0v6

out.write((wchar_t *)&p, sizeof(Person) * sizeof(wchar_t)); to nie ma sensu. Próbujesz zapisać kilka razy więcej danych niż masz, czyli masz UB. Poza tym, jak stwierdzasz, że nie zapisuje?

Jeszcze jedno: tylko char* jest specjalny, wchar_t* nie zezwala na dostęp do każdego typu, więc nawet odnoszenie się do pól m_ssn i m_age to UB.

0

Podejrzałem plik i na tej podstawie stwierdzam, że się nie zapisuje ;)
Po firstName dostałem ileś tam znaków NUL i na tym plik się zakończył.
Próbowałem też bez mnożenia. Ale faktycznie masz rację - coś mi podczas walki wymknęło się spod kontroli i wkradło się mnożenie. Niemniej jednak ani tak, ani wszystko co jest za pierwszym łańcuchem się nie zapisuje.

[DOPISANE]
Po przerobieniu na char zaczęło działać. To, jak prawidłowo zapisać w taki sposób łańcuchy wchar_t ?

1

Ponieważ są w tablicach zapiszą się poprawnie przy użyciu ofstream i konwersji na (char*)&p

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