Supportnet Computer
Planet of Tech

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 Codes


Antwort 2 von Supermax

Nachtrag: deine Definition von main() ist falsch, korrekt ist
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 möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: