Kezdőoldal » Számítástechnika » Programozás » Miért hibás C++ -ban ez a...

Miért hibás C++ -ban ez a beolvasás?

Figyelt kérdés

std::ifstream ist{"1.txt"};


while(!ist.eof())

{

char *t = new char[30];

ist >> t;

std::cout << t << " ";

delete[] t;

}



2015. szept. 10. 20:56
1 2
 11/12 anonim ***** válasza:

Mint írtam, inicializálni kell a tömböt, akkor 0-val tölti fel, szóval megvan a 0 végződés, azért is volt ott az üres zárójel: new char[30]();

Igaz, itt annyi hibát elkövettem, hogy nem 30, hanem 31 kellett volna, mert kell 1 + hely a 0-nak, ha előtte végig megvan a 30 karakter. Itt még lehetett volna C++11-esen "{0}"-t is írni a C++03-as "()" fill helyett.


Egy lehetséges megoldás hibakezeléssel és üres fájl vizsgálattal:


#include <iostream>

#include <fstream>


#define BLOCK_SIZE 30


int main(int argc, char *argv[]) {

std::ifstream* input;

char* buff = new char[BLOCK_SIZE];


input = new std::ifstream("1.txt", std::ios::binary | std::ios::in | std::ios::ate);

if (input->fail()) {

std::cout << "Unable to open input file!" << std::endl;

return EXIT_FAILURE;

} else if (input->tellg() > 0) {

input->seekg(std::ios::beg);

while (!input->eof()) {

input->read(buff, BLOCK_SIZE);

std::cout.write(buff, input->gcount()) << " ";

}

delete[] buff;

} else {

std::cout << "Empty file." << std::endl;

}

input->close();

delete input;

return 0;

}

2015. szept. 10. 23:52
Hasznos számodra ez a válasz?
 12/12 anonim ***** válasza:

Eredeti kérdésre: az első dolog, ami nem jó, az a "while(!ist.eof())", nem beolvasás előtt kéne megnézni, hogy eof van-e, hanem beolvasni, és utána ellenőrizni, hogy a _beolvasás_ sikeres volt-e.

A readdel valószínűleg jó lesz, ha eggyel kevesebbet olvasol, és a végére pakolsz egy 0-t (bár nem tudom, mi értelme van).


A foglalásos probléma az tényleg ott van, de nem kizárt, hogy ezt a fordító elintézi (a memóriafoglalás miatt nem vagyok benne biztos).

2015. szept. 11. 15:26
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!