Avatar billede ostehamster Nybegynder
24. november 2008 - 12:00 Der er 2 kommentarer og
1 løsning

Læs fil, og udskriv indhold - hvorfor virker der ikke?

Hej

Jeg vil læse indholdet af et ppm billeder, som starter således:
P3
# CREATOR: GIMP PNM Filter Version 1.1
543 719

Jeg har lavet dette meget simple program:
int main() {
    int idp = 0;

    FILE *fp ;
    fp = fopen ( "portraitl-ascii.ppm","r" ) ;
    char *buf = malloc(256);
    fgets(buf, 256, fp);

    idp=0;
    while(idp<50) {
        printf("%c",buf[idp++]);
    }
    return(0);
}

Når jeg kørere det står der bare "P3".

Kører jeg det med strace kan jeg se at filen læses rigtigt:
read(3, "P3\n# CREATOR: GIMP PNM Filter Ve"..., 4096) = 4096

Men udskrivning ser således ud:
write(1, "P3\n", 3P3
)                    = 3
write(1, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 47) = 47

Som om alt efter \n bliver lavet om til NULL.

Hvorfor det? :)

På forhånd tak
Christoffer
Avatar billede dennismp Nybegynder
24. november 2008 - 12:38 #1
Fra min lokale man-page:

fgets() reads in at most one less than size characters from stream and stores them into
the buffer pointed to by s.  Reading stops after an EOF or a newline.  If a newline  is read,  it  is stored into the buffer. 

Så fgets giver dig kun den første linje af filen. Du skal kalde fgets() igen for at få næste linje.
Avatar billede ostehamster Nybegynder
24. november 2008 - 14:17 #2
Dooh, der kunne jeg jo selv lige have kigget en gang :)

Men takker mange gange, point?
Avatar billede dennismp Nybegynder
24. november 2008 - 14:19 #3
Det er jo hvad der sker indimellem :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester