私はlpCmdLineがどのように動作するかを理解しようとしていますが、やや直感的です。lpCmdLineはどのように格納されていますか?
元々は、コマンド文字列全体へのポインタに過ぎないと思っていましたが、lpCmdLineの表示にはゴミが直接表示されるため、このコードではそうではありません。
#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;
}
lpCmdLineは内部でどのように格納されていますか?その引数が可変引数であるため、
ソリューション
私alertfはvsprintf_s
の代わりsprintf_s
を使用する必要があります。
この1つの変更は、lpCmdLineが実際に私が思ったように、コマンドライン全体のc文字列であることを確認します。
注:ANSI形式のコマンドラインのみです(常に)。 'GetCommandLineW()' API関数を使ってUnicodeのコマンドラインを取得することができます。 –
@Dmitry、StackOverflowで、あなたの質問のタイトルに "ANSWERED"を追加する必要はありませんし、元の質問に解決策を提供する必要はありません。 – dreamlax
@dreamlax申し訳ありません。 – Dmitry