online 1
gast (50)

/ Forum / Anwendungen(Java,C++...)

Anwendungen(Java,C++...)Anwendungen(Java,C++...)

Fragevon TByte vom 04.10.2020, 13:37 Options

Lösung

char* vergleichen MS Visual C++

Hallo
Ich schreib grad ne Konsolenanwendung und will die Parameter vergleichen, die main beim Start bekommt.
int main(int args, char* argv)
{
 if(argv[1] == "-h")
 {
  cout << "hallo";
 }
}

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 schreiben

Antwort 1 von Supermax vom 04.10.2020, 14:03 Options

du mußt die Funktion strcmp() verwenden, und zwar
if (strcmp(argv[1],"-h")==0) {
   /* Rest deines Codes

Antwort 2 von Supermax vom 04.10.2020, 14:10 Options

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 vom 04.10.2020, 14:22 OptionsLösung

Lösung
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 vom 04.10.2020, 19:11 Options

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?

Ähnliche Themen

visual oder normal
TByte  13.01.2008 - 8 Hits - 11 Antworten

visual basic minimieren
HugoHamburger  30.11.2009 - 122 Hits - 4 Antworten

'const char [11]' kann nicht in 'int' konvertiert werden
TByte  15.06.2008 - 105 Hits - 10 Antworten

Bild einbinden in Visual C++
KevKus  17.07.2008 - 66 Hits - 7 Antworten

welches visual studio
codie  21.09.2008 - 35 Hits - 10 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026