strncasecmp()



  • Hi!

    ich habe gerade einen Code bekommen, ich konnte es in OSX einwandfrei compilieren. Wenn ich es in Windows kompiliere sagt er dass er strncasecmp identifier nicht findet, was könnte da los sein?? fehlt mir eine h datei im Code zu includieren??

    DANKE!



  • #include <strings.h>
    int srtncasecmp(const char *string1, const char *string2, size_t count);
    

    includest du strings.h?



  • Das ist keine Standard-Funktion, sondern eine rein Unix-Konforme Funktion:
    man: strncasecmp
    Sonst würde das auch in der Man-Page stehen in der Kategorie "Standards", diese taucht dort aber nicht auf. (Siehe als Vergleich: man: strncmp)

    Edit: Aber man kann sich diese Funktion auch relativ leicht selbst schreiben, indem man eine Funktion mit entsprechendem Namen schreibt und in dieser auf beide Zeichenketten ein tolower oder toupper durchführt und dann vergleicht.

    Greetz



  • COOL!!!
    strncmp hat funktioniert!!!



  • Ja, die Funktion verlgeicht aber Case-Sensitiv, was strcasecmp nicht tut. Habe hier mal ne Implementierung für strcasecmp erstellt:

    int strcasecmp(const char *s1, const char *s2) {
    	while (*s1 != 0 && tolower(*s1) == tolower(*s2)) {
    		++s1;
    		++s2;
    	}
    
    	return
    	(*s2 == 0)
    	? (*s1 != 0)
    	: (*s1 == 0)
    		? -1
    		: (tolower(*s1) - tolower(*s2));
    }
    

    Damit sollte es auch ein leichtes sein strncasecmp zu implementieren (also mit Angabe der Anzahl zu vergleichender Zeichen).

    Dieser Thread gehört aber wohl eher ins C Forum.



  • Es gibt zu strcasecmp(), das nur unter Linus/Unix funktioniert, alternativen:
    Windows benutzt: stricmp()
    Borland (soweit mir bekannt) benutzt: strcmpi()

    Die Erweiterung "n" gleich nach str, ist bei jeder Plattform gleich.



  • Und um uns diese weltbewegende Erkenntnis mitzuteilen, gräbst du einen Thread aus, der bereits vor 5 Jahren friedlich entschlafen ist? In anderen Kulturen bezeichnet man das als Leichenschändung.



  • CStoll schrieb:

    Und um uns diese weltbewegende Erkenntnis mitzuteilen, gräbst du einen Thread aus, der bereits vor 5 Jahren friedlich entschlafen ist? In anderen Kulturen bezeichnet man das als Leichenschändung.

    Bei inhaltlicher Kritik habe ich kein Problem. Dies ist aber keine.
    Es gibt Menschen, die noch immer mit diesem Problem konfrontiert werden und dieser Thread wurde nicht zu Ende beantwortet.
    Ich denke das reicht als Rechtfertigung, wobei ich nicht weiß, wieso ich mich hier rechtfertigen muss.

    Von einem Moderator hätte ich auf jedem Fall etwas konstruktives erwartet.


  • Mod

    GhostMan schrieb:

    Von einem Moderator hätte ich auf jedem Fall etwas konstruktives erwartet.

    Nein, CStoll hat absolut Recht. Es gibt gute Gründe, warum Threadnekromantie in allen Foren der Welt verpönt ist und die gelten auch hier. Also mach bitte nicht weiter damit.


Anmelden zum Antworten