当C 中的系统调用conconculables时,参数字符串中的字符损失

Char loss in argument string when call excutables with system in C++

本文关键字:参数 字符串 字符 损失 conconculables 系统调用      更新时间:2023-10-16

我使用 system调用带有参数列表的外部授权文件。

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

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

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

但是可执行文件的输出为

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

字符^消失了。

为什么会发生这种情况?如何解决此问题?

理想情况下,您应该使用宽字符串字符和 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);

请注意STARTUPINFOCreateProcess之后的W

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

的ANSI版本
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);