strcasestr() nicht gefunden (implicit declaration of...)
-
Hi!
Ich benutze in meinem Programm die strcasestr() Funktion, aber leider meckert der Compiler immer das er diese Funktion nicht kennt:
implicit declaration of function 'strcasestr'
Die Funktion des Programms scheint aber trotzdem gegeben zu sein. Zumindest funktioniert folgendes kleines Programm:
#include <string.h> #include <stdio.h> int main () { if ( strcasestr("__HALLO__","hallo") ) printf("Hallo hier bin ich!\n"); return 0; }
Aber wie bekomme ich diese Warnungen weg?
Ich benutze den GCC4.1.2 unter Linux.
Gruß
Thorsten
-
Es gibt kein strcasestr. Implementiere dir die gewünsche Funktion selber.
-
oder versuch es mal mit der compileroption -lc
-
Hi!
Doch, die Funktion gibt es. Das Programm funktioniert ja wie es soll. Es erkennt das in __HALLO__ das Wort hallo vorkommt ohne auf die Groß/Kleinschreibung zu achten:
> man 3 strcasestr NAME strstr - locate a substring SYNOPSIS #include <string.h> char *strstr(const char *haystack, const char *needle); #define _GNU_SOURCE #include <string.h> char *strcasestr(const char *haystack, const char *needle); DESCRIPTION The strstr() function finds the first occurrence of the substring needle in the string haystack. The terminating `\0’ characters are not compared. The strcasestr() function is like strstr(), but ignores the case of both arguments. [....]
Was macht denn -lc genau, also außer Meldungen wie "linker input file unused because linking not done" auszugeben?
Gruß
Thorsten
-
Ikarisan schrieb:
Doch, die Funktion gibt es. Das Programm funktioniert ja wie es soll. Es erkennt das in __HALLO__ das Wort hallo vorkommt ohne auf die Groß/Kleinschreibung zu achten:
Dann lies doch auch mal den Rest der man-Page (man: strcasestr):
STANDARDS The strstr() function conforms to ANSI X3.159-1989 (``ANSI C'').
(die normale Funktion strstr() gibt's im Standard - ob es die strcasestr() auf deinem System gibt, ist Glückssache)
-
char *strcasestr(char *big,char *little) { char *ret; if(little == NULL) {return big;} int cnt=0; int cnt2=0; int L = strlen(little); int l =0; do { cnt2 =0; while(little[cnt2] != 0) { if(big[cnt+cnt2] == little[cnt2] || big[cnt+cnt2] == little[cnt2]-32 || big[cnt+cnt2] == little[cnt2]+32) { l++; } else { l=0; } if(l == 1) { ret = big+cnt; } cnt2++; } if(L == l) { return ret; } cnt++; } while(big[cnt] != '\0'); return 0; }