2 Pluspunkte 0 Minuspunkte

Wie kann ich 2 Strings miteinander vergleichen? Ich habe dieses Skript

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    char *str = argv[1];

    if (strcmp(str, "red")) {
        printf("1");
    } else if (strcmp(str, "blue")) {
        printf("2");    
    } else if (strcmp(str, "green")) {
        printf("3");
    } else {
        printf("---");
    }

    return 0;
}

Wenn ich es mit dem Argument "blue" aufrufe kommt aber "1" für "red".

C:\users\tom\desktop\main.exe
1
von  

1 Antwort

1 Pluspunkt 0 Minuspunkte

Die Funktion strcmp gibt 0 zurück, wenn die beiden Zeichenketten gleich sind. Wenn sie nicht gleich sind, gibt sie einen Wert ungleich 0 zurück. In deinem Code vergleichst du die Rückgabewerte von strcmp in den if-Bedingungen, und da 0 als false interpretiert wird, werden die Bedingungen immer wahr sein, es sei denn, strcmp gibt ungleich 0 zurück. Die Zeile

if (strcmp(str, "red")) 

fragt eigentlich "ist str nicht red?" - also das Gegenteil von dam was du willst. Du willst fragen "ist str gleich red?". Hier ist eine korrigierte Version.

if (strcmp(str, "red") == 0) {
    printf("1");
} else if (strcmp(str, "blue") == 0) {
    printf("2");    
} else if (strcmp(str, "green") == 0) {
    printf("3");
} else {
    printf("---");
}
von