Kommandozeilenparameter Visual C++ 2005



  • Hey Leute !
    Habe folgendes Problem: Ich schreibe eine Consolen Anwendung mit der Visual C++ 2005 Enterprise Edition IDE. Ich würde gerne dem Programm Kommandozeilenparameter übergeben. Dazu habe ich folgenden simplen Code

    int _tmain(int argc,_TCHAR* argv[])
    {
    	cout << argv[0];
    	system("pause");
    	return 0;
    }
    

    So damit erhalte ich eine Speicheradresse wenn ich nun einen * vor argv[] beim cout setze erhalte ich irgendeine Zahl. Hab dann den Typ probiert auf einen normalen CHar Pointer zu setzen. Damit erhalte ich aber dann nur den Anfangsbuchstaben der Anwendung. Als ich es dann mit argv[0][1] versucht habe, bekam ich ein Blank.
    Einer eine Idee wie das funktionieren könnte ?

    MfG
    Ruby



  • Hallo,
    in Standard-C++:

    #include <iostream>
    #include <ostream>
    using namespace std;
    int main(int argc, char** argv) {
        cout << argv[0];
        cin.get();
    }
    


  • Hab es auch grade mal mit den zwei ** versucht der Effekt ist der gleiche ich bekomme nur den ersten Buchstaben des Kommandoparameters 😕



  • Ich tippe mal auf ein UNICODE-Problem. Wenn du dein Programm in UNICODE-Modus übersetzt, bekommst du die Parameter als "wchar_t" (Wide Character) - und basic_ostream<char> kommt nicht mit wchar_t zurecht. Das heißt, du müsstest deine Ausgaben an "wcout" leiten (die UNICODE-Version von cout).

    Oder, um unabhängi von Einstellungsänderungen zu sein:

    #ifdef UNICODE
      #define tcout wcout
    #else
      #define tcout cout
    #endif
    
    ...
    
    int _tmain(int argc,_TCHAR* argv[])
    {
        tcout << argv[0];
        system("pause");
        return 0;
    }
    

    (btw, das "system("pause");" solltest du weglassen - in der FAQ findest du elegantere Möglichkeiten, das Programm am Ausschalten zu hindern)



  • CStoll schrieb:

    (btw, das "system("pause");" solltest du weglassen - in der FAQ findest du elegantere Möglichkeiten, das Programm am Ausschalten zu hindern)

    Wenn er (ausschließlich) unter VS 2005 programmiert?
    ('_tmain' wird doch eh von keinem anderen Compiler erkannt; oder darf man Parameter plötzlich als wchar_t** übergeben?).


Anmelden zum Antworten