在C ++中使用系统调用excutables时参数字符串中的char丢失

时间:2018-03-29 14:37:30

标签: c++ windows

我使用system使用参数列表调用外部可删除文件。

string all = (excuteablePath + " " + inputDir + " " + outputDir + " " + spacing);
system(all.c_str());

IDE或all中显示的字符串cout的值为

.\sample.exe .\孙夏^4735\UR7\ .\孙夏^4735\UR7.stl 0.3 0.3 0.3

但可执行文件的输出是

.\sample.exe .\孙夏4735\UR7\ .\孙夏4735\UR7.stl 0.3 0.3 0.3

角色^消失了。

为什么会发生这种情况,我该如何解决?

1 个答案:

答案 0 :(得分:1)

理想情况下,您应该使用宽字符串和CreateProcess

std::wstring wstr =
    L".\\sample.exe .\\孙夏^4735\\UR7\\ .\\孙夏^4735\\UR7.stl 0.3 0.3 0.3";
STARTUPINFOW si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessW(0, &wstr[0], NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

请注意WSTARTUPINFO

之后的CreateProcess

如果您被迫使用ANSI代码页,请使用ANSI版CreateProcess

std::string str =
    ".\\sample.exe .\\孙夏^4735\\UR7\\ .\\孙夏^4735\\UR7.stl 0.3 0.3 0.3";
STARTUPINFOA si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessA(0, &str[0], NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);