通过CreateProcessW使用“mkdir”创建的目录名中的垃圾?

时间:2012-06-08 19:34:49

标签: c++ c winapi

运行以下代码后,除了文件夹显示之外,一切都按照我的意愿执行: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.");
            }
        }

2 个答案:

答案 0 :(得分:6)

cmdline未正确终止ASCIIZ。您可以检查这是否只是添加结尾0(注意:未测试和快速黑客):

cmdline.push_back(0);

答案 1 :(得分:0)

正如其他人所说,你没有将以空字符结尾的字符串传递给CreateProcessW(),这就是为什么你最终在文件夹名称中添加了额外的字符。另请注意,您应该使用CreateProcessW()而不是使用mkdir来调用CreateDirectoryW()。然后,您可以将arrStringstd::string更改为std::wstring,然后完全摆脱std::vector