none
Kommandozeilenargumente ermitteln RRS feed

  • Frage

  • Ich versuche eine einfache Win32-Konsolenanwendung mit Visual C++ zu schreiben. Dabei will ich die Argumente beim Programmabruf ermitteln. Wie mache ich das? Ich habe schon folgendes probiert:

     

    // Testprogramm.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	cout<<argv[0];
    	cin.get();
    }
    
    
    
    Dabei müsste argv[0] doch eigentlich zu dem Namen der Anwendung führen. Stattdessen wird mir aber 00364500 ausgegeben. Was muss ich machen, damit das wie erwartet funktioniert?

    feuerblitz03

    Montag, 19. Juli 2010 06:16

Antworten

  • Ich denke Du hast Dein Projekt als Unicode compiliert. cout (bzw ostream) ist für ANSI  Strings. Compiliere es mal mit der Option "Multy Byte Character Set" (zu Dinden unter Menü "Project - <your project> propierties - configuration properties - general - dann auf der rechten Seite unter Project defaults bei character sets"

    Du kannst aber auch anstatt

    cout<<argv[0]; 

    bei Unicode compilat

    wcout<<argv[0]; 

    verwenden.

    • Als Antwort markiert feuerblitz03 Mittwoch, 24. November 2010 14:46
    Montag, 19. Juli 2010 06:59
  • Ich wollte eigentlich das erste Argument ermitteln. Das hat vorher auch nicht geklappt. Das Programm sieht jetzt so aus:

     

    // Testprogramm.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    if (argc>1) {
    cout<<argv[1]<<"\n";
    }
    	cin.get();
    }
    
    
    

    Dann klappt es.

     

    feuerblitz03

    • Als Antwort markiert feuerblitz03 Montag, 19. Juli 2010 07:41
    Montag, 19. Juli 2010 07:41

Alle Antworten

  • Ich denke Du hast Dein Projekt als Unicode compiliert. cout (bzw ostream) ist für ANSI  Strings. Compiliere es mal mit der Option "Multy Byte Character Set" (zu Dinden unter Menü "Project - <your project> propierties - configuration properties - general - dann auf der rechten Seite unter Project defaults bei character sets"

    Du kannst aber auch anstatt

    cout<<argv[0]; 

    bei Unicode compilat

    wcout<<argv[0]; 

    verwenden.

    • Als Antwort markiert feuerblitz03 Mittwoch, 24. November 2010 14:46
    Montag, 19. Juli 2010 06:59
  • Hallo feuerblitz03!

    Dabei müsste argv[0] doch eigentlich zu dem Namen der Anwendung führen.

    Das muss nicht so sein!
    Der "argv[0]" ist nur dann der Anwendungsname, wenn im CreateProcess dies auch so angegeben wurde... das ist zwar oft so, muss aber nicht sein. Wenn Du den Anwendungsnamen wissen willst, solltest DU dies via

    GetModuleFileName(NULL, ...);

    ermitteln.

    Greetings
      Jochen


    Jochen Kalmbach (MVP VC++)
    Montag, 19. Juli 2010 07:24
  • Ich wollte eigentlich das erste Argument ermitteln. Das hat vorher auch nicht geklappt. Das Programm sieht jetzt so aus:

     

    // Testprogramm.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    if (argc>1) {
    cout<<argv[1]<<"\n";
    }
    	cin.get();
    }
    
    
    

    Dann klappt es.

     

    feuerblitz03

    • Als Antwort markiert feuerblitz03 Montag, 19. Juli 2010 07:41
    Montag, 19. Juli 2010 07:41