C Starter dinamikus felépítés és a bináris, c a kezdők

C ++ bináris Add a dinamikus struktúra egy bináris fájl

Figyelem!
Használhatja a kettős áthaladnak a fájlt. Először számolja meg a szerkezetek, válassza ki a kívánt számot a memória és a második olvassa el az összes fájl szerkezete. Ez egy jobb út. Én például kevésbé biztonságos, és több medve csak elméleti előny, de nem praktikus

A kérdés az, hogyan lehet fenntartani a dinamikus struktúra a bináris érdekelt engem nagyban után közvetlenül az első tapasztalatok a sikeres munka bináris fájlokat. Azok számára, akik csak most kezdett tanulni c ++ is, a nagyon értelme a dinamikus struktúrák, objektumok, osztályok, de nem annyira nyilvánvaló.

Kerestem a keresési fel és le, de semmit nem találtak értelmes róla. Alapvetően van egy példa, amely egy statikus változó.

Használhatja a különböző módszereket. Az első gondolatok, hogy számolja meg a tárgyat, majd írjuk be a fájl elején, vegye ki, mint a számláló, majd hajtsa végre a hurok a pultra. Igen, ez a lehetőség teljesen normális, de szeretném, hogy mások egy bináris fájl nem rögzített semmit extra. Ennek eredményeként találtam a módját, hogy megoldja. Messze nem a legjobb módja, de tudom, hogy egy csomó ember is jön fel, mint nem.

C ++ kód Save / Olvassa el a dinamikus struktúra egy bináris fájl

Más szóval. Jegyezzük fel a dinamikus struktúra egy fájl írható csak, mint egy normális változó.

A rekord egy bináris fájlt rendezve. Kiderült, hogy nem olyan nehéz, de van egy kérdés az olvasás. Hogyan kell olvasni egy bináris fájl több struktúrákat.

Most, miután már úgy mindent egy halom, mindez csomó index TempY adatok jeleníthetők meg a számláló, és a ciklus számlálóját. Valaki tud megnyugodni, és eldönteni, hogy mi ez az egész, hogy nincs szükségünk másra. De ki gondolná úgy, hogy majd a globális hiba. Ha emlékezni fog, látni fogja, hogy az eredetileg nem TempY memóriát, így minden megszerzett adatokat hajtott ki a sejtek, mint az illegális telepesek. A kilakoltatás adatokat a sejtek vezethet kiszámíthatatlan következményekkel és költő az összes szükséges, hogy menjen vissza oda, ahol Kiűzik semmit. Erre és használt harmadik mutató. A számos ismert struktúrák és megszámoltuk, majd a harmadik mutató annyi memóriát, amennyire szüksége van, és segítségével letelepítése ciklus adatok dinamikus struktúrák a sejtek nem biztonságos a biztonságos

Saját ötlet egyszerű, hogy az elme, ha tudja, hogyan kell használni a dinamikus listákat, és ebben az esetben, hogy egy biztonságos olvasóteremben struktúrák a fájl egy időben.

1. tempY inicializált értéke nulla, és akkor kezdődött ciklikus fájl olvasása, minden egyes lépésben az ugyanezen memória hely (nem tudjuk, melyik). Ez azzal a kockázattal jár, hogy tempY jelezhetik például a memória rész által elfoglalt egy másik változó. A program felülírja a változót, és minden - három hét, ász - a program szia (legjobb). Felvenni valamit tempY alatta először a memóriát.

2. Mivel x és y - ukazaeli, a művelet sizeof X és sizeof Y ad pointerek méretei, és nem az egész tömb.

Úgy vélem, hogy az olvasás és írás megfelelően kell átírni:

1. Írásban fájlba:

out.write ((char *) X, sizeof (MyStruct) * 5); // az X - mutatót, az üzemeltető 'nem szükséges

2. olvasása fájlból (ha nem tudja a számot rögzített fájl szerkezetét (de IMHO, ha írunk a fájlba egy sor struktúrák, akkor az első sorban könnyebb, hogy pontosan a méret a tömb)):

struct MyStruct * tempY = new struct MyStruct;
struct MyStruct * Temp = 0;
struct MyStruct * y = 0;
int count = 0;

std :: ifstream az;
in.open ( «123.txt», std :: ios :: bináris | std :: ios :: in);
míg a (in.read ((char *) tempY, sizeof (struct MyStruct))) számolni ++;

PS: memóriát ebben az esetben könnyebb használni malloc / realloc, csökkentett kódot.

Nem egy remekmű, természetesen, de nekem úgy tűnik, hogy ez lenne a helyes.

Kapcsolódó cikkek