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. |