C++ zapis struktury

0

Siema, mam pewną strukturę i do tej pory zapisywało się wszystko idealnie, ale gdy dodałem do niej 1 pole to oczywiście wszystko się wali i program się wywala. Patrzę i patrzę na ten kod i nie umiem zrozumieć błędu:

typedef struct{
	std::string temp_slonce, temp_cien,prawd_opady,pred_wiatru,stan;
} Pogoda;

typedef struct{
	double fizyczny,intelektualny,emocjonalny;
} Biorytm;


typedef struct{
	std::string username,password,znak_zodiaku,miasto,horoskop,sciezka_profilu;
	int dzien_urodznia, miesiac_urodzenia, rok_urodzenia;
	Pogoda pogoda;
	Biorytm biorytm;
} Profil;

sciezka_profilu to pole, które dodałem, funkcja zapisująca:

int ZapiszProfil(Profil* profil)
{
	char* temp;
	int temp_i;
	temp = (char*)gtk_entry_get_text(GTK_ENTRY(EntryBoxes[0]));
	profil->username = temp;
	temp = (char*)gtk_entry_get_text(GTK_ENTRY(EntryBoxes[1]));
	profil->password = temp;
	temp = (char*)gtk_entry_get_text(GTK_ENTRY(EntryBoxes[2]));
	profil->miasto = temp;
	temp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(ComboBoxes[0]));
	temp_i = atoi(temp);
	profil->dzien_urodznia = temp_i;
	temp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(ComboBoxes[1]));
	temp_i = atoi(temp);
	profil->miesiac_urodzenia = temp_i;
	temp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(ComboBoxes[2]));
	temp_i = atoi(temp);
	profil->rok_urodzenia = temp_i;
	temp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(combo));
	profil->znak_zodiaku = temp;
	g_free(temp);
	std::ofstream do_pliku;
	std::string nazwa_pliku = "Profiles/";
	nazwa_pliku+= profil->username;
	nazwa_pliku +=".profil";
//	profil->sciezka_profilu = nazwa_pliku.c_str(); <-- bez tego działa dobrze gdy to odkomentuje to się wywala wszystko
	do_pliku.open(nazwa_pliku.c_str(),std::ofstream::binary | std::ofstream::trunc);
	if (do_pliku.fail()) return -1;
	do_pliku.write((char*)profil,sizeof(Profil));
	if (do_pliku.bad()) return -2;
	do_pliku.close();
	if (do_pliku.fail()) return -3;
	do_pliku.close();
	return 0;
}
0

Update: jeśli dam Continue gdy pojawia się okno, że program odplaił Breakpoint'a to aplikacja działa dobrze. Już całkowicie się pogubiłem.

0

Nie ma możliwości aby to dobrze zapisywało.
Jeżeli masz string'a jako składową struktury to nie możesz tego zapisać jednym write'm ani też odczytać jednym read'em ponieważ string zawiera tylko kilka bajtów w strukturze niezależnie od rozmiaru wpisanego do niego napisu. Sam napis trzymany jest pod wskaźnikiem który wchodzi w skład tych kilku bajtów.
Więc zapisując strukturę ze string'iem zapisujesz adres w pamięci gdzie trzymasz aktualnie ten napis.
Sam chyba rozumiesz że odczyt się nie uda.

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