C++ 被CreateprocessW截断的命令行参数
VS10,MBCS,Unicode预处理器defs。 浏览过谷歌博士的案例后,最好的帮助是,但它并没有完全解决这个问题。考虑这个代码,其中这个ExpPATH是可执行文件的路径:C++ 被CreateprocessW截断的命令行参数,c++,process,command,arguments,truncate,C++,Process,Command,Arguments,Truncate,VS10,MBCS,Unicode预处理器defs。 浏览过谷歌博士的案例后,最好的帮助是,但它并没有完全解决这个问题。考虑这个代码,其中这个ExpPATH是可执行文件的路径: cmdLineArg = (wchar_t *)calloc(BIGGERTHANMAXPATH, sizeof(wchar_t)); wcscpy_s (cmdLineArg, maxPathFolder, L"\\\\??\\C:\\My directory\\My directory\\"); CreateProc
cmdLineArg = (wchar_t *)calloc(BIGGERTHANMAXPATH, sizeof(wchar_t));
wcscpy_s (cmdLineArg, maxPathFolder, L"\\\\??\\C:\\My directory\\My directory\\");
CreateProcessW (thisexePath, cmdLineArg, NULL, NULL, FALSE, NULL, NULL, NULL, &lpStartupInfo, &lpProcessInfo)
当程序被调用时
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
wchar_t hrtext[256];
swprintf_s(hrtext, sizeof(hrtext), L"%ls", lpCmdLine);
//deal with possible buffer overflow later
MessageBoxW(NULL, hrtext, L"Display", MB_ICONINFORMATION);
}
hrtext仅显示“我的目录\我的目录\”,此处明显遗漏了什么?这不正确:
wchar_t hrtext[256];
swprintf_s(hrtext, sizeof(hrtext), L"%ls", lpCmdLine);
第二个参数应该表示字符数,而不是字节数
应该是这样的:
wchar_t hrtext[256];
swprintf_s(hrtext, sizeof(hrtext) / sizeof(wchar_t), L"%ls", lpCmdLine);
或者简单地说:
wchar_t hrtext[256];
swprintf_s(hrtext, 256, L"%ls", lpCmdLine);
这是不正确的:
wchar_t hrtext[256];
swprintf_s(hrtext, sizeof(hrtext), L"%ls", lpCmdLine);
第二个参数应该表示字符数,而不是字节数
应该是这样的:
wchar_t hrtext[256];
swprintf_s(hrtext, sizeof(hrtext) / sizeof(wchar_t), L"%ls", lpCmdLine);
或者简单地说:
wchar_t hrtext[256];
swprintf_s(hrtext, 256, L"%ls", lpCmdLine);
swprintf_s(hrtext,sizeof(hrtext),L“%ls”,lpCmdLine)代码>第二个参数似乎是错误的。它应该表示字符数,而不是字节数。您希望显示什么?我在你的帖子中没有看到任何内容建议显示“我的目录\我的目录”以外的内容。请问“\\\?\\C:\\”怎么了?。它是自动被截断还是什么?“\\\\??\\\”
不是有效的前缀。这应该是“\\\\?\\”
,带有一个问号(请参阅)。@IInspectable:在自己的代码中使用它并取得了很好的效果(大部分)。从一根古老的OSR线上得到的。还有人提出了这个问题——它似乎与swprintf_s(hrtext,sizeof(hrtext),L“%ls”,lpCmdLine)的符号链接有关代码>第二个参数似乎是错误的。它应该表示字符数,而不是字节数。您希望显示什么?我在你的帖子中没有看到任何内容建议显示“我的目录\我的目录”以外的内容。请问“\\\?\\C:\\”怎么了?。它是自动被截断还是什么?“\\\\??\\\”
不是有效的前缀。这应该是“\\\\?\\”
,带有一个问号(请参阅)。@IInspectable:在自己的代码中使用它并取得了很好的效果(大部分)。从一根古老的OSR线上得到的。也有人提出了这个问题——它似乎与感谢和编辑代码的符号链接有关。但是截断仍然发生!谢谢并编辑了代码。但是截断仍然发生!