String zerteilen + Teilstring vergleichen



  • Hallo!

    ich versuche gerade einen String in 2 Teile zu zerteilen, und dann eines der gefundene Elemente mit einem anderen String zu vergleichen.

    So habe ich es versucht:

    #include <string.h>
    #include <stdio.h>
    
    char string[] = "username: test";
    char seps[]   = ": ";
    char *key;
    char *val;
    
    int main() {
    
       key = strtok( string, seps );
       printf( "key: %s\n", key);
    
       val = strtok( NULL, seps );
       printf( "val: %s\n", val);
    
       if(val == 'username') {
           printf( "\nOK\n"); 
       }
       return 0;
    }
    

    Naja, da kommt der Fehler:

    string.c: In function `main':
    string.c:18: character constant too long
    string.c:18: warning: comparison between pointer and integer
    

    Ich verstehe 2 Dinge nicht. Wieso Pointer und "Interger"? Was denn für ein Interger, woher denn das?

    Und 2., wie kann ich denn den Wert auf den der Pointer zeigt mit einem String vergleichen? AFAIK macht printf() da eine Typenumwandlung, muss ich das auch manuell machen, oder muss ich den Wert erst in eine lokale Variable kopieren um vergleichen zu können?

    Und nochwas, ich finde zwar einige gute Anleitungen zu C, aber wo finde ich informationen über die Funktionen(deren Namen, Parameter und Rückgabewerte)? Gibt es da nicht irgendwo sowas wie eine Referenz? Z.B. die String-Funktionen von string.h, wo finde ich was es da so alles gibt? Alles was ich finde sind Tutorials mit Beispielen, das hilft auch oft weiter, aber eine Referenz wäre schon etwas bequemer.

    Viele Grüße,
    Andreas

    PS: Kennt jemand von Euch eine gute Anleitung für einen Socket-Server in C? Am besten mit AF_UNIX Sockets, aber das ist nicht so wichtig.



  • 'foo' - das ist ein char

    "foo" - das ist ein string

    und string vergleichen tut mn mit strcmp()



  • Vielen Dank, aber wo findet man solceh Funktionen?
    Ich suche auch ein Funktion die das erste, oder das letzte Zeichen eines Strings entfernt.

    Grüße
    Andreas



  • Shade Of Mine schrieb:

    'foo' - das ist ein char

    "foo" - das ist ein string

    und string vergleichen tut mn mit strcmp()

    Geht leider noch nicht richtig:

    #include <string.h>
    #include <stdio.h>
    
    char string[] = "username: ich";
    char seps[]   = ": ";
    char *key;
    char *val;
    
    int main() {
    
       key = strtok( string, seps );
       printf( "key: %s!\n", key);
    
       val = strtok( NULL, seps );
       printf( "val: %s!\n", val);
    
       if(strcmp(val,"username")) {
           printf( "OK\n\n"); 
       }
       return 0;
    }
    

    Egal was ich für "username" einsetze, die Bedingung scheint immer TRUE zurückzugeben.

    Ist übrigens die Verwendung von strtok hier OK? Mit ": " als delimiter, eigentlich ist das ja immer ein char, aber irgendwie scheint es zu gehen.
    Oder würdet Ihr das zerteilen anders machen? Ich habe immer Strings mit obigem Schema.

    Grüße
    Andreas



  • Geh mal in den Debugger und Step mal Schritt für Schritt durch deinen Code und schau dir die Variablen Inhalte an.
    Was steht in in val zum Zeitpunkt des Vergleichs

    zur Fehlersuche füge mal folgende 2 Zeilen vor dem if ein und prüfe nach ob wie comp ist 0 >0 <0

    int comp=-999;
    comp=strcmp(val,"username");
    

    Vermutlich findest du so den Fehler 🙂

    Vielen Dank, aber wo findet man solceh Funktionen?
    Ich suche auch ein Funktion die das erste, oder das letzte Zeichen eines Strings entfernt.

    In den Handbüchern, in der Hilfe

    Als Handbuch für C Herbert Schildt the Complete reference, das gibts auch in einer deutschen Übersetzung.

    Die Funktion gibt es meines Wissens nicht
    Das letzte Zeichen Entfernen

    s[(strlen(s)-1)]=0x00;
    

    Um das erste Zeichen zu entfernen must du alle Zeichen eins nach links schieben

    int StringLen;
    char s[]={"TESTSTRING"};
    
    StringLen=strlen(s)
    for (i=1;i<=Stringlen;i++)
    s[i-1]=s[i];
    

Anmelden zum Antworten