Frage zu strcmp()



  • Hallo,

    in meinem Buch steht strcmp() wie folgt:

    int strcmp(char str1[], char str2[])
    {
    int i
    for( i=0; str1[i] == str2[i]; ++i)
    if(str1[i] == '\0') break;

    return( str1[i] - str2[i]);
    }

    Frage:

    Wieso liefert die Funktion einen int Wert, str[i] ist doch ne ne Hex-Zahl, oder is das ne dezimal ASCII-Zahl? Aber selbst dann: <if(str1[i] == '\0') break;> setzt voraus, dass str2 länger als str1 ist ?
    Und <str1[i] - str2[i]> ist dann vollkommen abhängig von den Buchstaben/Inhalt?

    Bitte klärt mich auf

    MfG

    PS:

    Und kann man auch schreiben:

    ...
    for(i=0; str[1] != '\0'; ++i)
    if(str1[i] != str2[i]) break;

    return i;
    ...

    ?



  • 1. Es gibt keinen Typ für Hexzahlen oder sowas. Ein int hat einen Wert, egal ob du ihn jetzt dezimal, hexadezimal, oktal, binär oder sonstwie interpretieren willst.

    2. strcmp gibt zurück, ob der zu vergleichende String gleich, größer oder kleiner als der zweite String ist. Und genau das siehst du auch. Wenn die beiden gleich sind, wird irgendwann das break ausgeführt und 0-0==0 zurückgegeben. Ansonsten wird beim ersten ungleichen char die Differenz zurückgegeben. Und daran siehst du dann halt, welcher String nach ASCII-Sortierung "größer" ist.

    EDIT:
    3. Dein Vorschlag macht keinen Sinn, da der Rückgabewert dann eine komplett andere Aussage hätte (nämlich wieviele Stellen übereinstimmen).


Anmelden zum Antworten