lpCmdLine ---> **argv
-
Hallo!
ich will die lpCmdLine aus der WinAPI in ein argv ändern. Unterschied: argv = Array aus C-Strings, lpCmdLine = alle parameter in ein C-String durch Leerzeichen getrennt. Folgender Code endet bei einer Endlosschleife, wenn ein Leerzeichen gefunden wurde:std::string argv(lpCmdLine), tmp; size_t pos; int argc = 0; const char *real_argv[1024]; if(strlen(lpCmdLine)) { // Mindestens ein Parameter vorhanden argc = 1; // solange die Position nicht npos ist... while((pos = argv.find_first_of(" ")) != std::string::npos) { tmp = argv.substr(0, pos); // Ersten String herauspicken real_argv[argc++] = tmp.c_str(); // Im Array sichern argv = argv.substr(pos, argv.size()); // den vorderen Teil abschneiden } }Hat jemand eine Idee?

-
Huuuaai!
Such mal hier im Forum nach ner Funktion split oder lass WinApi den Job machen: CommandLineToArgvW
-
C0d0r schrieb:
Hat jemand eine Idee?

Ja.
Du solltest pos um eins erhöhen, bevor du das machst.argv = argv.substr(pos, argv.size());Denn sinnigerweise ist das erste Zeichen immer noch das gefundene Leerzeichen, daher Endlosschleife...
-
Ach ja, ich würd es sowieso lassen, argv mit nem neuen String zu überschreiben. du hast doch sowieso pos, dann mach doch std::string::find() immer von der letzten pos weg. Wird deutlich schneller sein.
-
Gott, ich trottel, danke!
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Es ist zu bedenken, daß die Elemente einer Commandline nicht nur durch Leezeichen sondern auch durch Hochkomma getrennt werden. Wobei dann ein Argument, daß durch Hochkommas eingegrenzt wird durchaus Leerzeichen enthalten darf, z.B. einen Pfadangabe. Und dann gibts da noch dn Blog vom Martin:
http://blog.m-ri.de/index.php/2008/11/09/winmain-mit-argc-und-argv
__argc und __argv bzw. __argvw werden als globale Variblen beim Programmstart erstellt, is dann so wie du es aus der Konsole gewohnt bist!