Miért hibás C++ -ban ez a beolvasás?
std::ifstream ist{"1.txt"};
while(!ist.eof())
{
char *t = new char[30];
ist >> t;
std::cout << t << " ";
delete[] t;
}
Szerintem az a baj, hogy a karakter tömb esetében nem lehet használni a >> operátort + nem ártana inicializálni a tömböt.
Így pl. már működik:
std::ifstream ist{"1.txt"};
while(!ist.eof())
{
char *t = new char[30]();
ist.read(t, 30);
std::cout << t << " ";
delete[] t;
}
Lehet használni a >> operátort, azonban ha több karakter van a bufferben hibát dob. A read funkcióval így az már nem probléma, azonban felvet egy másik problémát.
Ezen felül még van benne 1 hiba ami helytelen futást eredményez, és 1 hiba ami teljesítménybelit.
Melyik az újonnan felmerült probléma, és melyik a másik kettő?
Hiba:
std::ifstream ist{"1.txt"};
Itt mit keres kapcsoszarojel.
Teljesitmeny:
A ciklusban mindig uj memoriateruletet new-olsz majd torlod, amikor eleg lenne egyszer lefoglalni es ujrahasznalni.
std::ifstream ist{"1.txt"}; C++11 ( [link]
Új hiba:
ist.read(t, 30) után nem lesz 0 terminated a string.
Régi hiba:
!ist.eof(), mert így mindenképpen lefut egyszer a ciklus
A teljesítményes meglátásod teljesen jó.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!