Strings vergleichen



  • Hallo,

    Folgendes Problem:

    Mein Programm soll über die Kommandozeile Parameter einlesen.
    Wird dies beispielsweise mit "vektor.exe --help" aufgerufen, so soll ein
    Hilfetext erscheinen.
    Mein Minimalprogramm sieht wie folgt aus:

    int main(int argc, char *argv []) {
    char *str = malloc((MAX_STRING_LENGTH+1) * sizeof(char));
    str = argv[1];
    if (str == "--help")
    printf("HILFE:");

    }

    Leider ist die Abfrage immer Falsch.
    Wenn ich printf("%s",str)'; anschließend ausführe wird auch korrekt
    "--help" ausgegeben. Vielleicht könnt Ihr mit weiterhelfen.

    Viele Grüße

    Filip



  • Strings vergleicht man in C mit strcmp(). Du vergleichst den Wert in str mit "--help", und dieser Wert ist ein Zeiger, also der Addresswert deines dynamischen Speichers. Und da "--help" dann als ein Zeiger auf das Literal interpretiert wird, ist das Ergebnis immer false.



  • Hallo,

    wo wir gerade das Thema haben, gibt
    es in der Standardlibrary auch ne Funktion,
    die Unterschiede in Groß- und Kleinschreibung
    ignoriert?

    Diddi



  • Diddi schrieb:

    Hallo,

    wo wir gerade das Thema haben, gibt
    es in der Standardlibrary auch ne Funktion,
    die Unterschiede in Groß- und Kleinschreibung
    ignoriert?

    Diddi

    Nein. AFAIK nicht. Aber mit den vorhandenen Funktionen sollte es kein Problem sein, sich selbige zu basteln.

    Gruß Caipi



  • Diddi schrieb:

    wo wir gerade das Thema haben, gibt
    es in der Standardlibrary auch ne Funktion,
    die Unterschiede in Groß- und Kleinschreibung
    ignoriert?

    Direkt nicht. Es gibt zwar, abhängig von der Implementierung, Funktionen wie stricmp. Diese gehören aber nicht zum C Standard. Dennoch kann man relativ einfach sich selbst mit Standardmitteln eine entsprechende Funktion basteln. Dazu bedient man sich der tolower() bzw. toupper() Funktion.

    int stricmp(const char* s1, const char* s2)
    {
    	size_t i = 0;
    	while (s1[i] != '\0' && tolower(s1[i]) == tolower(s2[i]))
    		++i;
    	return (int) s1[i] - s2[i];
    }
    


  • FilipK schrieb:

    char *str = malloc((MAX_STRING_LENGTH+1) * sizeof(char));
    str = argv[1];

    SPEICHERLECK!


Anmelden zum Antworten