Puchacz1 Opublikowano 12 Czerwca 2011 Zgłoś Opublikowano 12 Czerwca 2011 mam taki oto prosty program który pod środowiskiem kompiluje się poprawnie (ale przy uruchamianiu wyrzuca: terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct NULL not valid ) natomiast przy kompilacji (g++ -Wall -pedantic -o nazwa nazwa.cpp) wyrzuca jakieś niezrozumiałe instrukcje których tu nie będę przytaczał bo jest tego bardzo dużo.Powiedzcie co robię źle. #include <iostream>#include <fstream>#include <string>using namespace std;struct Osoba{ string nazwisko; string imie; string wiek;};bool wczytaj(string &nazwa, Osoba *&dane, int &ile){ ofstream plik; plik.open(nazwa.c_str(), ios::in | ios::out); plik << ile; if(ile!=0) { dane = new Osoba [ile]; for(int i=0; i<ile; ++i) { if(plik.good()) { plik << dane[i].imie << dane[i].nazwisko << dane[i].wiek; } } return 1; } else { cerr << "Pusty plik bądź brak informacji o rozmiarze"; return 0; }}void wypisz(ostream &plik, Osoba &dane){ plik << dane.imie << dane.nazwisko << dane.wiek;}int main(int argc, char *argv[]){ string pl_wej(argv[1]); string pl_wyj(argv[2]); int ile; // Osoba *dane; if(!wczytaj(pl_wej, dane, ile)) { cerr << "[gluteus maximus] zbita"; } wypisz(cout, dane[2]); return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Vennor Opublikowano 12 Czerwca 2011 Zgłoś Opublikowano 12 Czerwca 2011 Przypisujesz zero do obiektu string, podajesz konstruktorowi pusty łańcuch C, który zawiera wyłącznie NULL. Sprawdź: string foo('\0'); oraz string bar = 0;. Zainicjalizuj zmienne ile i pl_wej. Dlaczego nie używasz fstream? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...