Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

binarne zapisywanie i odczytywanie struktur "Program przestał działać"

Ostatnio zmodyfikowano 2015-05-19 11:29
Autor Wiadomość
bmb.bambus
Temat założony przez niniejszego użytkownika
binarne zapisywanie i odczytywanie struktur "Program przestał działać"
» 2015-05-18 18:13:09
Staram się binarnie zapisać i odczytać tablicę struktur do pliku sam zapis i odczyt nie przerywa działania programu jedynie późniejsza próba wyświetlenia tego. Dlaczego sie tak dzieje i co jest nie tak z tymi funkcjami ?

C/C++
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <cstdio>
#include <fstream>
using namespace std;

class Rejestr {
public:
    struct opis_samochodu {
       
        string marka;
        string model;
        string typ_nadwozia;
        string vin;
        string rok_produkcji;
        string ladownosc;
        string typ_silnika;
        long przebieg;
       
    };
   
   
};

void zapis( Rejestr::opis_samochodu * tab ) {
    FILE * file = fopen( "rejestr.data", "w" );
    for( int i = 0; i < 4; i++ ) {
        fwrite( & tab[ i ], sizeof( Rejestr::opis_samochodu ), 1, file );
    }
   
}

void odczyt( Rejestr::opis_samochodu * tab ) {
    FILE * file = fopen( "rejestr.data", "r" );
    for( int i = 0; i < 4; i++ ) {
        fread( & tab[ i ], sizeof( Rejestr::opis_samochodu ), 1, file );
    }
}

int main( void )
{
    Rejestr::opis_samochodu * tab;
    int n = 4;
    tab = new( nothrow ) Rejestr::opis_samochodu[ n ];
   
    zapis( tab );
    odczyt( tab );
   
    cout << tab[ 0 ].marka; // ta linijka przerywa działanie ale najprawdopodobnie to przez źle napisane funkcje zapisu/odczytu
   
    return 0;
}
P-132463
pekfos
» 2015-05-18 18:26:56
Nie możesz tak zapisać struktur, które zawierają pola std::string, lub tym podobne.
P-132464
Rashmistrz
» 2015-05-18 20:43:22
A nie możesz normalnie tekstowo?!
P-132477
bmb.bambus
Temat założony przez niniejszego użytkownika
» 2015-05-19 10:13:26
Skoro nie ma możliwości zapisania stringa ze struktury to może tablice charow ? Więc nie ma możliwości zapisania struktury tablicy struktur binarnie ? Plik po otwarciu nie może pokazywać zawartości, również szyfrowanie odpada ze względu na treść zadania. :/
P-132492
akwes
» 2015-05-19 11:29:17
Jest możliwość zapisania struktury ale musi ona spełniać pewne założenia: What are POD types in C++?.

Zawsze możesz napisać własny serializer/deserializer, który będzie Twoją klasę zapisywał do pliku i odczytywał z pliku dzięki wiedzy o strukturze i niezmiennikach danej klasy. Możesz też dać klasie funkcje, które będą ją serializować/deserializować. Serializacja i deserializacja będzie opierać się o dekompozycję klasy i jej składników aż do uzyskania typów, które będą spełniać założenia POD.

Ewentualnie możesz skorzystać z boosta: http://www.boost.org/doc/libs​/1_36_0/libs/serialization/doc​/index.html

Jednak patrząc na treść zadania z niej wnioskuję, że na aktualnym poziomie najlepiej będzie Ci napisać funkcję, która binarnie zapisze string poprzez zapisanie jego rozmiaru (pojedynczy int) a później kolejnych charów łańcucha. Wczytując tego stringa będzie mogła zrobić odwrotnie: wczytać rozmiar (pierwszy int) i tyle charów ile ten int określi.
P-132493
« 1 »
  Strona 1 z 1