Probleme mit fread() und libpng



  • Hallo!

    Bin neu hier im Forum und fange auch gerade erst mit C an.

    Ich wollte zu Anfang ein kleines Programm schreiben das prüft ob es sich bei einer Datei um eine gültige PNG-Datei handelt. Dazu benutze ich die libpng (unter linux).

    Hier erstmal der Quellcode:

    #include <stdio.h>
    #include <png.h>
    #define PNG_BYTES_TO_CHECK 4
    
    int main(int argc, char *argv[])
    {
    	char header[PNG_BYTES_TO_CHECK];
    	FILE *fp = fopen("screen-1063401902.png", "rb");
    	fread(header, 1, PNG_BYTES_TO_CHECK, *fp);
    	int is_png = !png_sig_cmp(header, (png_size_t)1, PNG_BYTES_TO_CHECK);
    	return is_png;
    }
    

    Und hier die Ausgabe des GCC:

    dennis@kip ~ $ gcc -o ispng ispng.c 
    ispng.c: In function `main':
    ispng.c:9: incompatible type for argument 4 of `fread'
    

    Hab auch schon versucht fread() anstatt dem Pointer nur `fp` zu übergeben - klappt aber auch nicht. Kann mir da jemand mal weiterhelfen?

    vielen Dank im voraus!
    gruss, kip

    P.S.: bitte nicht schlagen! bin wie gesagt Anfänger 🙂



  • Hallo,

    also eines ist klar, diese Zeile:

    fread(header, 1, PNG_BYTES_TO_CHECK, *fp);
    

    ist auf jeden Fall korrekt, zumindest gibt es hier dann keinen Compiler-Fehler mehr (obwohl du ja behauptest, daß es dann auch nicht geht, dann muß irgendetwas anderes nicht gehen, oder, soll heißen, genauere Infos wären nicht schlecht)

    MfG



  • in meiner letzten Antwort muß es natürlich heißen:

    diese Zeile:

    fread(header, 1, PNG_BYTES_TO_CHECK, fp);´
    

    ist auf jeden Fall korrekt.... 😉

    MfG



  • Hallo!

    Nach Recherchen im Forum habe ich es in folgendes geändert:

    #include <stdio.h>
    #include <png.h>
    #define PNG_BYTES_TO_CHECK 4
    
    int main(int argc, char *argv[])
    {
    	char header[PNG_BYTES_TO_CHECK];
    	FILE *fp;
    	fp = fopen("screen-1063401902.png", "rb");
    	fread(header, 1, PNG_BYTES_TO_CHECK, fp);
    	fclose(fp);
    	int is_png = png_sig_cmp(header, (png_size_t)1, PNG_BYTES_TO_CHECK);
    	return is_png;
    }
    

    .. der obige Fehler bleibt jetzt auch aus, allerdings bekomme ich einen anderen der aber wohl eher etwas mit der libpng zu tun hat:

    dennis@kip ~ $ gcc -o ispng ispng.c 
    /tmp/cc4sJBar.o(.text+0x6b): In function `main':
    : undefined reference to `png_sig_cmp'
    collect2: ld returned 1 exit status
    

    .. die Funktion png_sig_cmp() ist aber laut libpng manual und example in der png.h vorhanden.

    @Probe-Nutzer:
    was meinst du mit genaueren Informationen? Gebe ich dir sehr gerne! Nur welche?



  • gcc -o ispng ispng.c

    wenn du libpng benutzt würde ich die auch mal die lib mitlinken
    gcc -lpng



  • ahh ... vielen dank 🙂
    daran hab ich garnicht gedacht .. 🙂


Anmelden zum Antworten