makes pointer from integer wihtout cast
-
Hallo
Hab die Google-Suche und auch die Forensuche bemüht, aber das sind immer andere Probleme, die ich leider nicht auf meine Thematik anwenden kann.
Hier der Code:if ( strcmp(fno.fname[strlen(fno.fname)-4],".mp3")==0 ){play_file(fno.fname);}
fno sieht folgendermaßen aus:
typedef struct _FILINFO_ { DWORD fsize; /* File size */ WORD fdate; /* Last modified date */ WORD ftime; /* Last modified time */ BYTE fattrib; /* Attribute */ char fname[13]; /* Short file name (8.3 format) */ #if _USE_LFN XCHAR* lfname; /* Pointer to the LFN buffer */ int lfsize; /* Size of LFN buffer [characters] */ #endif } FILINFO;
Meldung für strcmp: warning: passing argument 1 of 'strcmp' makes pointer from integer without a cast
Habt ihr da ne Idee?
Dankestöhn
-
hmm i dunno lol^^
aber probier mal:
if ( strcmp(&(fno.fname[strlen(fno.fname)-4]),".mp3")==0 ){play_file(fno.fname);}
Mfg
-
Oh je, da gibt's gleich 3 Fehlermeldungen auf einmal:
../main.c:186: warning: left-hand operand of comma expression has no effect
../main.c:186: error: expected ']' before ')' token
../main.c:186: error: array subscript is not an integer
../main.c:186: error: too few arguments to function 'strcmp'"Der Nächste bitte!"
-
wohl eher so
if ( strcmp(&fno.fname[strlen(fno.fname)-4],".mp3")==0 ){play_file(fno.fname);}
bin mir aber auch nicht sicher
-
Läuft!
juhuAber noch ne Frage: mit dem &-Operator bekomm ich doch ne Adresse von fno.fname. Aber er vergleicht doch 2 char-Arrays bzw. Strings oder?
Was macht die Funktion denn intern?
-
PlattitüdenAbonennt schrieb:
Aber er vergleicht doch 2 char-Arrays bzw. Strings oder?Was macht die Funktion denn intern?
zeichenweisen vergleich. sind beide strings gleich lang und haben gleiche zeichen an gleichen stellen, dann gibt sie 0 zurück, sonst die differenz der gefundenen ungleichen zeichen (glaube ich).
-
;fricky schrieb:
PlattitüdenAbonennt schrieb:
Aber er vergleicht doch 2 char-Arrays bzw. Strings oder?Was macht die Funktion denn intern?
zeichenweisen vergleich. sind beide strings gleich lang und haben gleiche zeichen an gleichen stellen, dann gibt sie 0 zurück, sonst die differenz der gefundenen ungleichen zeichen (glaube ich).
Glaube ist was für Weicheier ... :p
<a href= schrieb:
http://man.cx">DESCRIPTION
The strcmp() function compares the two strings s1 and s2. It returns
an integer less than, equal to, or greater than zero if s1 is found,
respectively, to be less than, to match, or be greater than s2.The strncmp() function is similar, except it only compares the first
(at most) n characters of s1 and s2.RETURN VALUE
The strcmp() and strncmp() functions return an integer less than, equal
to, or greater than zero if s1 (or the first n bytes thereof) is found,
respectively, to be less than, to match, or be greater than s2.Ich würde übrigens aus Sicherheitsgründen generell zu strncmp() raten ...
-
pointercrash() schrieb:
Ich würde übrigens aus Sicherheitsgründen generell zu strncmp() raten ...
vielleicht so: strncmp (s1, s2, strlen(s1)); *fg*
nee, strncmp ist zum vergleichen von teilstrings da, nicht um programmierfehler zu kaschieren. und mit lesezugriffen kann man sowieso nix kaputtmachen.
-
;fricky schrieb:
pointercrash() schrieb:
Ich würde übrigens aus Sicherheitsgründen generell zu strncmp() raten ...
vielleicht so: strncmp (s1, s2, strlen(s1)); *fg*
nee, strncmp ist zum vergleichen von teilstrings da, nicht um programmierfehler zu kaschieren. und mit lesezugriffen kann man sowieso nix kaputtmachen.
Achso, mit einem strlen() hattest Du noch nie einen Segfault? strcmp() sucht, bis bei str1 und/oder str2 die dämliche terminating 0 oder ein Unterschied auftaucht. Also, ich verlasse mich nicht darauf.
-
pointercrash() schrieb:
;fricky schrieb:
pointercrash() schrieb:
Ich würde übrigens aus Sicherheitsgründen generell zu strncmp() raten ...
vielleicht so: strncmp (s1, s2, strlen(s1)); *fg*
nee, strncmp ist zum vergleichen von teilstrings da, nicht um programmierfehler zu kaschieren. und mit lesezugriffen kann man sowieso nix kaputtmachen.Achso, mit einem strlen() hattest Du noch nie einen Segfault?
doch, aber das ist gut so. der sagt mir ja, dass ich was falsch gemacht habe.
pointercrash() schrieb:
strcmp() sucht, bis bei str1 und/oder str2 die dämliche terminating 0 oder ein Unterschied auftaucht. Also, ich verlasse mich nicht darauf.
ich schon. wenn ich strings vergleiche, dann bin ich mir sicher, dass eine 0 hinten dranhängt. wenn nicht, nehme ich 'memcmp'. 'strncmp' mit einer willkürlichen grenze hilft ja auch nicht viel, wenn man c-strings nicht traut. ist der wert zu klein, dann sagt strncmp 'sind gleich', obwohl sie nicht gleich sind und ist er zu gross, dann wird ja doch über die strings hinausgelesen.