strcmp
-
Hallo,
ich bin ein C Neueinsteiger, und ich musste ein Programm schreiben das die funktion strcmp hat, mir ist alles gelungen bis auf das halt. Der Compiler zeigt mir immer Fehler an, könnte vielleicht jemand drüber schauen. Wäre echt nett!#include <stdio.h> #include <stdlib.h> #include <string.h> int main (int argc, char *argv[]) { int i; printf("Ninja Machine started\n"); i=0; while (i<argc) { printf("%s \n",argv[i]); i++; } if (0== strcmp(&argv[i], '--version') ) { printf("xxx"); } printf("%d parameters entered on the command line.\n",i); printf("Ninja Machine stoped\n"); return 0; }
Der Fehler liegt bei der if einweisung, alles andere funktioniert. Das sind die Fehlermeldungen:
Aufgabe_1.c(21): error #2140: Type error in argument 1 to 'strcmp'; expected 'const char *' but found 'char * *'.
Aufgabe_1.c(21): warning #2055: Excess characters in multibyte character literal ignored.
Aufgabe_1.c(21): error #2140: Type error in argument 2 to 'strcmp'; expected 'const char *' but found 'int'.
Vielen dank im vorraus
-
Saido schrieb:
if (0== strcmp(&argv[i], '--version') )
-
Zeichenketten werden in Anführungszeichen gesetzt, einzelne Zeichen in Hochkommas. "Zeichenkette" (Typ char*), 'C' (einzelnes Zeichen, Typ char). strcmp erwartet zwei Zeichenketten als Argumente.
-
argv ist vom Typ char**. argv[i] ist argv einmal dereferenziert, also vom Typ char*. Mit & holst du die Addresse dieses Pointers, also hast du wieder den Typ char**. Erwartet wird aber, wie schon erwähnt, char*.
-
-
danke schön, er compiliert jetzt fehlerfrei. Sieht jetzt so aus:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main (int argc, char *argv[]) { int i; printf("Ninja Machine started\n"); i=0; while (i<argc) { printf("%s \n",argv[i]); i++; } if (strcmp(argv[i], "--version") ) printf("xxx"); printf("%d parameters entered on the command line.\n",i); printf("Ninja Machine stoped\n"); return 0; }
Aber irgendwie stürtz jetzt meine Programmierumgebung, wenn ich es ausführen will. Liegt aber nicht am Programm oder ? Ich verwende Pelles C für Windows.
Ich habe noch eine frage, kann man die Version vom compiler ausgeben, mit der --version abfrage ?
-
Und jetzt prüf nochmal den Wert i. Du greifst auf einen ungültigen Index zu.
-
achso, deswegen ist das Programm abgestürtz. Habe jetzt anstatt
if (strcmp(argv[i], "--version")), if (strcmp(argv[0], "--version")) hin geschrieben, also i mit 0 getauscht, aber wieso verstehe ich nicht so richtig ?
-
In dem Array sind die übergebenen Parameter enthalten, startend bei Index 1 (0 enthält den Dateinamen).
-
achso dankeschön, ich habe noch 2 weiter fragen. Undzwar kann man die version des compiler nicht irgendwie ausgeben. Also so ungefähr:
if (strcmp(argv[0], "--version") ) printf("getversion\n"); // getversion ist frei erfunden, aber gibt es nicht sowas ähnliches ? Oder sowas if (strcmp(argv[0], "--help") ) printf("gethelp\n"); // das wäre dann so ähnlich als ob ich in der windows console (cmd) help eingeben würde
-
Saido schrieb:
achso dankeschön, ich habe noch 2 weiter fragen. Undzwar kann man die version des compiler nicht irgendwie ausgeben. Also so ungefähr:
if (strcmp(argv[0], "--version") ) printf("getversion\n"); // getversion ist frei erfunden, aber gibt es nicht sowas ähnliches ? Oder sowas if (strcmp(argv[0], "--help") ) printf("gethelp\n"); // das wäre dann so ähnlich als ob ich in der windows console (cmd) help eingeben würde
Mit Makros geht das sicher, aber macht eigentlich keinen großen Sinn.
-
ok danke schön, aber ich habe noch eine frage wenn es geht
also mein programm läuft bis auf eine kleinigkeit, er gibt immer die version aus, obwohl ich eine if anweisung habe, die es nur erlaubt wenn mann --version eingibt. Hier nochmal das komplette ding:#include <stdio.h> #include <stdlib.h> #include <string.h> int main (int argc, char *argv[]) { int i; printf("Ninja Machine started\n"); i=0; while (i<argc) { printf("%s \n",argv[i]); i++; } if (strcmp(argv[0], "--version") ) { printf("version\n"); } else if (strcmp(argv[1], "--help") ) { printf("help\n"); } printf("%d parameters entered on the command line.\n",i); printf("Ninja Machine stoped\n"); return 0; }
-
Janjan schrieb:
In dem Array sind die übergebenen Parameter enthalten, startend bei Index 1 (0 enthält den Dateinamen).
-
verstehe das nicht so richtig, was muss ich verändern ?
-
Saido schrieb:
verstehe das nicht so richtig, was muss ich verändern ?
if (strcmp(argv[1], "--version") == 0) // argv[1] und nicht argv[0] { printf("version\n"); } else if (strcmp(argv[1], "--help") == 0) { printf("help\n"); }
-
Nochmal als Beispiel. Programmaufruf Test.exe Para1 Para2 Para3
argv[0] = "Test.exe"
argv[1] = "Para1"
argv[2] = "Para2"
argv[3] = "Para3"
-
Alles klar, vielen dank. Ihr habt mir echt geholfen!!!