/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
ifstream::gets
Fra : Byrial Jensen


Dato : 20-09-02 20:05

Jeg er stødt på en konstruktion som nedenstående i et C++-program:

#include <fstream>
#include <stdlib.h>
using namespace std;
int main ()
{
ifstream is ("filnavn.txt");
char *cp;
is.gets (&cp);
cout << cp << endl;
free (cp);
return 0;
}

Jeg kan ud fra mit kendskab til C mere eller mindre gætte mig til
hvad ifstream::gets gør, men jeg kan ikke finde nogen beskrivelse
af funktionen i nogen af de C++-bøger som jeg råder over, herunder
"The C++ Programming Language" af Bjarne S.

Er det standard? Findes der en komplet reference over standard
funktioner på internettet? I en bog?

Koden er i øvrigt forkert ifølge valgrind som ikke kan lide kaldet
af free. Hukommelsen skal frigives med "delete [] cp;" for at
tilfredsstille valgrind. Har valgrind ret?

 
 
Ivan Johansen (20-09-2002)
Kommentar
Fra : Ivan Johansen


Dato : 20-09-02 20:32

Byrial Jensen wrote:
> Er det standard?

Nej. Der er ikke noget, der hedder std::ifstream::gets().

> Findes der en komplet reference over standard
> funktioner på internettet? I en bog?

http://www.cppreference.com/
http://www.dinkumware.com/htm_cpl/index.html


Ivan Johansen


Mogens Hansen (21-09-2002)
Kommentar
Fra : Mogens Hansen


Dato : 21-09-02 06:52


"Byrial Jensen" <bjensen@nospam.dk> wrote in message
news:slrnaoms7p.20u.bjensen@ask.ask...

[8<8<8<]
> #include <stdlib.h>

En lille ting:
det hedder
#include <cstdlib>

[8<8<8<]
> cout << cp << endl;

En lille ting mere:
du mangler
#include <iostream>
for at få adgang til cout

Prøv i stedet:
<code>
#include <fstream>
#include <iostream>
#include <string>

using namespace std;

int main ()
{
ifstream is ("filnavn.txt");
string line;

getline(is, line);

cout << line << endl;
}
</code>

Det virker med enhver tilnærmelsesvis anstændig C++ compiler.
Bemærk at du er ude over alle bekymringer om dynamisk allokering (f.eks.
størrelsen på bufferen, hvem og hvordan frigives, hvad hvis der smides en
exception) - det bliver simpelt hen bare håndteret korrekt (med mindre der
er fejl i compiler eller bibliotek).


[8<8<8<]
> Er det standard?

Nej

> I en bog?

Bogen
C++ Standard Library, The: A Tutorial and Reference
Nicolai M. Josuttis
ISBN 0-201-37926-0
er vist et glimrende bud.
Den er ikke fuldstændig komplet, men burde dække alt (stor set) hvad man har
brug for til praktisk brug.
Jeg har ikke selv læt den, men jeg kender flere der er glade for den. Du kan
eventuelt se anmeldelsen på www.accu.org (hvilket jeg ikke har gjort.)

Den mest komplette gennemgang af streams i C++ er givetvis bogen
Standard C++ IOStreams and Locales
Angelika Langer, Klaus Kreft
ISBN 0-201-18395-1

Den _komplette_ reference _er_ C++ Standarden, som kan købes for $18. Men
den er naturligvis hverken en læse-let-bog eller en pædagoisk lærebog.

Venlig hilsen

Mogens Hansen







Byrial Jensen (22-09-2002)
Kommentar
Fra : Byrial Jensen


Dato : 22-09-02 09:52

Mogens Hansen <mogens_h@dk-online.dk> skrev:
>
> Prøv i stedet:

Tak for kommentarerne og forslaget til hvordan det kan gøres bedre.
Ogå tak til Ivan.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste