运行以下代码后,除了文件夹显示之外,一切都按照我的意愿执行:test2﷽﷽ꮫꮫꮫꮫووو
这里发生了什么?
std::string arrString[3] = {" /C mkdir C:\\Users\\Andrew\\Desktop\\test1"," /C mkdir C:\\Users\\Andrew\\Desktop\\test2"," /C mkdir C:\\Users\\Andrew\\Desktop\\test3"};
LPWSTR cmd =L"C:\\Windows\\System32\\cmd.exe";
int i;
for(i=0; i<3; i++)
{
STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;
vector<wchar_t> cmdline(arrString[i].begin(), arrString[i].end());
CreateProcessW(cmd, &cmdline[0], NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo);
OutputDebugStringW(L"My output\nstring.");
}
}
答案 0 :(得分:6)
cmdline
未正确终止ASCIIZ。您可以检查这是否只是添加结尾0(注意:未测试和快速黑客):
cmdline.push_back(0);
答案 1 :(得分:0)
正如其他人所说,你没有将以空字符结尾的字符串传递给CreateProcessW()
,这就是为什么你最终在文件夹名称中添加了额外的字符。另请注意,您应该使用CreateProcessW()
而不是使用mkdir
来调用CreateDirectoryW()
。然后,您可以将arrString
从std::string
更改为std::wstring
,然后完全摆脱std::vector
。