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!