Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Argumentenübergabe in c++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.12.2009, 14:37 Uhr
dexathome



Hallo, habe zwar schon kleinere funktionale Programme geschrieben, aber mit Pointern bin ich noch nicht so warm geworden... habe mein Wissen darüber mehr durch experimente und google.de als von büchern... daher hab ich vermutlich was das thema Pointer angeht auch so meine schwachstellen.

Mein Programm soll mit der Aufruf: "programm.exe d" debugmeldengen ausgeben und zear so:


Zitat:


#include <cstdio>
#include <fstream>
#include <time.h>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])

{
if (argv[1] != "d") { cout<< "Augument 1 ist NICHT d"<<endl;}
if (argv[1] == "d") { cout<< "Aurgument 1 ist d"<<endl;}


cout <<"argc= "<< argc <<endl;
cout <<"argv[0]= "<< argv[0] <<endl;
cout <<"argv[1]= "<< argv[1] <<endl;

getchar();




Auch wenn argv[1] = d ist dann gibt er trotzdem aus:

Augument 1 ist NICHT d
argc= 2
argv[0]= c:\tec-worx\test.exe
argv[1]= d

WARUM???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.12.2009, 16:58 Uhr
Tommix



Hallo,
String-Inhalte werden in C mit strcmp verglichen:
http://msdn.microsoft.com/de-de/library/e0z9k731%28VS.80%29.aspx
== würde true liefern, wenn es sich links und rechts um ein und den selben String handelt (auf der gleichen Adresse).
Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.12.2009, 20:29 Uhr
0xdeadbeef
Gott
(Operator)


Beispielsweise:

C++:
#include <cstdio>
#include <fstream>
#include <ctime> // time.h ist ein C-Header
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
  if (argv[1] != string("d")) { cout<< "Augument 1 ist NICHT d"<<endl;}
  if (argv[1] == string("d")) { cout<< "Aurgument 1 ist d"<<endl;}


  cout <<"argc= "<< argc <<endl;
  cout <<"argv[0]= "<< argv[0] <<endl;
  cout <<"argv[1]= "<< argv[1] <<endl;

  cin.get();
}


argv[1] ist vom Typ char*, "d" vom Typ char const[2], nach impliziter Umwandlung vergleichst du also zwei char const *-Variablen. Für die sind Operatoren != und == zwar definiert, sie vergleichen aber die Zeiger selbst, nicht das, worauf sie zeigen, und auch nicht die Zwischenräume zwischen dem, worauf sie zeigen, und der nächsten Null im Speicher. Für std::string sind derartige Operatoren aber definiert, wenn also auf einer der beiden Seiten des Operators ein std::string-Objekt steht, wird der char-Zeiger auf der anderen als String interpretiert.

Aus Performance-Gründen wäre es allerdings vermutlich sinnvoll, die Umwandlung eines Arguments nur einmal vorzunehmen. Am einfachsten:

C++:
#include <string>
#include <vector>

using namespace std;

int main(int argc, char *argv[]) {
  vector<string> args(argv, argv + argc);

  if(args.size() > 1 && args[1] == "d") { // denkbar auch args.at(1)
    // ...
  }
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 26.12.2009 um 20:33 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: