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, kipP.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 ..