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;
    }
    

Anmelden zum Antworten