修改命令行参数

cho*_*wey 1 c++ winapi command-line

我有一个Win32 C++应用程序,我需要修改应用程序中的命令行参数.具体来说,我想以一种GetCommandLineW()返回我的新参数的方式编辑命令行参数.

信不信由你,这是有效的(因为我们有一个指向字符数组的非const指针):

LPTSTR args = GetCommandLineW();
LPTSTR new_args = L"foo --bar=baz";
wmemcpy(args, new_args, lstrlenW(new_args));

// ...
LPTSTR args2 = GetGommentLineW(); // <- equals "foo --bar=baz"
Run Code Online (Sandbox Code Playgroud)

但我不知道Windows为LPTSTR提供的内存分配了多长时间GetCommandLineW().

还有另一种方法吗?或者是否有人知道是否为命令行参数分配了可预测的内存量?

Rem*_*eau 5

GetCommandLineW()不分配任何内存.它只是返回一个指向缓冲区的指针,该缓冲区在PEB创建进程时由进程结构中的OS分配.该缓冲区在该进程的生命周期中存在.

  • 所以寿命问题不是问题。那么OP只需要担心潜在的缓冲区溢出。 (2认同)