Ich versuche zu verstehen, wie lpCmdLine verhält, und es scheint etwas entgegengesetzt intuitiv zu sein.Wie wird lpCmdLine gespeichert?
Ursprünglich dachte ich, es wäre nur ein Zeiger auf die gesamte Befehlsfolge, aber dieser Code zeigt, dass dies nicht der Fall ist, da die Anzeige von lpCmdLine direkt Müll anzeigt.
#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
void alertf(const char *fmt, ...)
{
char buf[80];
va_list args;
va_start(args, fmt);
sprintf_s(buf, fmt, args);
va_end(args);
MessageBox((HWND)0, buf, "Message Box", MB_OK | MB_ICONINFORMATION);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
alertf("lpCmdLine: '%s'.", lpCmdLine);
return 0;
}
Wie wird lpCmdLine intern gespeichert?
Lösung
Mein alertf sollte vsprintf_s
statt sprintf_s
verwenden, weil sein Argument ein varargs ist.
Diese eine Änderung bestätigt, dass lpCmdLine tatsächlich ist, wie ich ursprünglich dachte, eine c-Zeichenfolge der gesamten Befehlszeile.
Beachten Sie, dass es nur (und immer) eine ANSI-Form der Befehlszeile ist; Sie können die API-Funktion 'GetCommandLineW()' verwenden, um die Unicode-Befehlszeile abzurufen. –
@Dmitry, auf StackOverflow müssen Sie Ihrem Fragentitel weder "ANGEWIESEN" hinzufügen, noch müssen Sie die Lösung in Ihrer ursprünglichen Frage bereitstellen. – dreamlax
@dreamlax Entschuldigung. – Dmitry