0

次のコードを実行すると、フォルダーに次のように表示されることを除いて、すべてが思い通りに実行されます: test2﷽﷽ꮫꮫꮫꮫﻮﻮﻮ</p>

ここで何が起こっているのですか?

            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.");
            }
        }
4

2 に答える 2

6

cmdline正しくASCIIZで終了していません。これが末尾の0を追加するだけの原因であるかどうかを確認できます(注:テストされておらず、簡単なハックです)。

cmdline.push_back(0);
于 2012-06-08T19:38:40.600 に答える
0

他の人が言ったように、null で終わる文字列を に渡していないためCreateProcessW()、フォルダ名に余分な文字が含まれてしまいます。別の注意として、を使用CreateProcessW()して呼び出すmkdirのではなく、代わりに使用する必要がありますCreateDirectoryW()。次にarrString、 からstd::stringに変更してstd::wstring、 を完全に取り除くことができますstd::vector

于 2012-06-08T23:03:14.977 に答える