C++ Binární soubory – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++ Binární soubory – C / C++ – Fórum – Programujte.comC++ Binární soubory – C / C++ – Fórum – Programujte.com

 

7. 12. 2011   #1
-
0
-

Dobrý den,
Zkoušel jsem napsat program ve Visual c++, který používá binární soubory. Překladač mi nehlásí žádné chyby, ani varování. Zápis do souboru taky funguje. Když ale spustím program a chci, aby četl z binárního souboru, normálně informace vypíše, ale pod tím mi hlásí neošetřenou výjimku o poškozené paměti nebo tak něco. Tady je kód. Prosím o pomoc

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
using namespace std;

struct planeta
{
string jmeno; //Jméno planety
int prumer; //Průměr planety
int populace;  //Počet obyvatel
};

int main(void)
{
cout<<"1)Zapsat novou planetu"<<endl;
cout<<"2)Precist informace o zapsane planete"<<endl;
int in_out ;cin>>in_out;
if(in_out==1)
{
  planeta pl;
  cout<<"Zadejte jmeno: ";cin>>pl.jmeno;
  cout<<"Zadejte prumer km: ";cin>>pl.prumer;
  cout<<"Zadejte pocet obyvatel: ";cin>>pl.populace;
  fstream s;s.open("planeta.txt",ios_base::out|ios_base::binary);
  s.write((char*)&pl,sizeof pl);
  s.close();
  system("cls");
  cout<<"Nova planeta byla zapsana";
}
if(in_out==2)
{
  system("cls");
  planeta pl;
  ifstream s;s.open("planeta.txt",ios_base::binary);
  s.read((char*)&pl,sizeof pl);
  cout<<"Jmeno: "<<pl.jmeno<<endl<<"Pruměr km: "<<pl.prumer<<endl<<"Pocet obyvatel: "<<pl.populace<<endl;
  s.close();
}
cin.get();
    return 0;

}

DÍKY :-)

Nahlásit jako SPAM
IP: 88.102.98.–
7. 12. 2011   #2
-
0
-

Napadlo mě, že by to mohlo být tím, že pl.jmeno je typu string. Přepsal jsem to na char pl[40] a fungovalo to.

Nahlásit jako SPAM
IP: 88.102.98.–
ondra.holub+1
Stálý člen
8. 12. 2011   #3
-
0
-

Ano, je to tím, že jmeno je string. String je totiž třída, která obsahuje nějaká interní data a vysoce pravděpodobně i ukazatel na řetězec. Pokud tedy tuto třídu jenom zapíšete do binárního souboru, vytvoříte něco jako mělkou kopii. Po načtení ze souboru tam tedy máte nějaký ukazatel, který ovšem ukazuje nejspíš na nenainicializovanou paměť. Může náhodou ukazovat i na platnou paměť, ale rozhodně ne na data, která tam očekáváte.

Nahlásit jako SPAM
IP: 194.138.12.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Binární relace — založil Mautinek

Binární strom — založil Tomáš

Binární hledání — založil Kevil

Binární kód — založil wokena

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý