Benutzer mit den meisten Antworten
Kommandozeilenargumente ermitteln

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:
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?// 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(); }
feuerblitz03
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
-
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
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
-
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 viaGetModuleFileName(NULL, ...);
ermitteln.
Greetings
Jochen
Jochen Kalmbach (MVP VC++) -
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