Supportnet / Forum / Anwendungen(Java,C++...)
char* vergleichen MS Visual C++
Frage
Hallo
Ich schreib grad ne Konsolenanwendung und will die Parameter vergleichen, die main beim Start bekommt.
[code]int main(int args, char* argv)
{
if(argv[1] == "-h")
{
cout << "hallo";
}
}[/code]
Also argv[0] ist ja der Dateiname selber. Wenn ich mit einer for-Schleife alle Argumente mit den Index-Operatoren ausgebe, klappt das. Aber wenn ich das hier vergleiche, kommt immer, dass man char* nicht in int konvertieren kann!
Dann wollt ichs in string machen (string arg1 = argv[1];) klappt aber auch nicht (der faselt irgendwas von char kann nicht in std::basic_string<_Elem,_Traits,_Ax> konvertiervt werden). Dann hab ich erstmal char arg1 = argv[1]; und dann string a1 = arg1; gemacht. DAS KLAPPT ABER AUCH NICHT *heulheulheulheul*.
Was soll ich machen? Bittebittebittebitte hilfe! Google sagt mir, dass alles was ich gemacht habe eigentlich richtig sein müsste...
BITTE HILFE und DANKE SCHON JETZT.
mfg
TByte
Antwort 1 von Supermax
du mußt die Funktion strcmp() verwenden, und zwar
if (strcmp(argv[1],"-h")==0) {
/* Rest deines CodesAntwort 2 von Supermax
Nachtrag: deine Definition von main() ist falsch, korrekt ist
Kurze Erklärung: Strings bzw. Arrays allgemein sind in normalem C (nicht C++) nichts anderes als Zeiger auf den Anfang des dafür reservierten Speicherbereichs.
Die Codezeile
int main(int argc, char *argv[])Kurze Erklärung: Strings bzw. Arrays allgemein sind in normalem C (nicht C++) nichts anderes als Zeiger auf den Anfang des dafür reservierten Speicherbereichs.
Die Codezeile
if(argv[1] == "-h") vergleicht daher den Wert des Zeigers argv[1] mit der (impliziten) Startadresse des 3-Byte-Arrays mit den Elementen '-', 'h' und 0. Diese werden jedoch nie identisch sein.Antwort 3 von Supermax
Eine korrekte C++ Implementierung, welche die Methoden der string-Klasse nutzt, müßte ca. so aussehen:
#include <iostream>
#include <string>
using namespace std;
int main(int args, char *argv[]) {
string argv1(argv[1]);
if(argv1.compare("-h") == 0) {
cout << "hallo";
}
}Antwort 4 von TByte
Super, vielen vielen vielen Dank!
ich glaube der hauptfehler war, dass ich char *argv getippt hatte und nicht char *argv[]
Danke mfg
TByte
PS.: Bei welcher AW die Boni?
ich glaube der hauptfehler war, dass ich char *argv getippt hatte und nicht char *argv[]
Danke mfg
TByte
PS.: Bei welcher AW die Boni?

