[Warning] comparison between pointer and integer
-
Hallo,
Hier erstmal mein Errorlog:
[Warning] comparison between pointer and integer - Zeile 24
Mein Code:
#include <stdio.h> #include <stdlib.h> int getCfg(char filename[], char key[]) { FILE *fp = fopen(filename, "r"); char var[512], value[512], line[512]; if (fp) { while (fgets(line, sizeof(line), fp)) { if (sscanf(line, "%[^ \t=]%*[\t ]=%*[\t ]%[^\n]", var, value) == 2) { if(strncmp(var, key, strlen(key))==NULL) // Error { return value; //error } } } fclose(fp); } return 0; } int main(int argc, char **argv) { char val[1024]; int size; strcpy(val, getCfg("settings.cfg.txt", "Auto")); printf("%s\n", val); strcpy(val, getCfg("settings.cfg.txt", "Name")); printf("%s\n", val); system("pause"); return 0; }
Ich will die Warning wegbringen. Hat jemand eine Idee wie ich das lösen könnte? Danke.
Gruss DrDoc.
-
Das ist der Knackpunkt:
if (strncmp(var, key, strlen(key))==NULL)
Mach ein
(strncmp(var, key, strlen(key))==0)
draus.
Und lass mich nicht nochmal bis 24 zählen
-
Hallo,
Sorry ;-). Aber ich habe die Zeile mit //error gekennzeichnet. *hehe*.
Wieso funktioniert NULL nicht und muss mit 0 ersetzt werden? Ich versteh das jetzt irgendwie nicht.
Wann verwende ich NULL besser, wann 0?
Oder kann man das nicht gleichsetzen weil NULL nix ist und 0 ist 0? *g*.
Vielen Dank,
Gruss DrDoc!
-
Das hätte ich eigentlich nur von C++ erwartet und nicht von C, da C eigentlich recht lachs mit der Typensicherheit umgeht.
Also NULL ist eine Pointeradresse und strncmp liefert einen int zurück.
Deshalb sind es unterschiedliche Typen und werden nicht warnungslos implizit ineinander umgewandelt.
NULL muss auch nicht zwingend den Wert '0' haben.NULL verwendest du besser, wenn du einen Pointer als ungültig kennzeichnen möchtest, oder wenn eine Funktion, die einen Pointer zurückliefert, scheitert.
char* str = malloc(vielzuvielspeicherdendudaverlangst); //str ist jetzt NULL, da malloc scheiterte
-
SeppSchrot schrieb:
Das hätte ich eigentlich nur von C++ erwartet und nicht von C, da C eigentlich recht lachs mit der Typensicherheit umgeht.
Deshalb ist es ja auch nur eine Warnung und kein Fehler