C++ linux C+中system()的参数+;,Qt

C++ linux C+中system()的参数+;,Qt,c++,linux,qt,C++,Linux,Qt,当我用一个长字符串(它包含一些汉字)调用system()时 system()似乎无法正确处理我的参数 e、 g.接收的系统()与我发送的系统()不同 //it based on Qt void work(QString order) { system((const char*)order.toLocal8Bit()); // in terminal, it shows a wrong command different with what it should be. } 当我打电

当我用一个长字符串(它包含一些汉字)调用system()时

system()似乎无法正确处理我的参数

e、 g.接收的系统()与我发送的系统()不同

//it based on Qt

void work(QString order)
{
   system((const char*)order.toLocal8Bit());
   // in terminal, it shows a wrong command different with what it should be.
}
当我打电话的时候

work( "g++ "+nfile+name+".cpp -o "+nfile+name+" 2>"+nfile+"compiler.out" );
nfile表示一条长的路径,其中包含一些汉字

返回的字节数组未定义 如果字符串包含的字符不是 由本地8位编码支持

我假设您使用的汉字不受支持。您可能希望改为尝试。

根据

返回的字节数组未定义 如果字符串包含的字符不是 由本地8位编码支持


我假设您使用的汉字不受支持。您可能希望改为尝试。

将字符串转换为UTF-8并将其传递给
system()


将字符串转换为UTF-8并将其传递到
system()


如果您使用的是Qt,那么最好使用
QProcess
而不是
system
,请参阅如果您使用的是Qt,那么最好使用
QProcess
而不是
system
,请参阅您应该检查system()的返回值,尤其是在循环内调用work()时。否则,如果用户点击ctrl+C,它只会杀死g++进程,并继续执行您的程序,这可能会再次调用系统,因此您的程序将是不可修改的,并将继续肆无忌惮地执行。请参阅wait()/waitpid()函数,了解如何取消设置system()返回的内容。您应该检查system()的返回值,尤其是在循环内调用work()时。否则,如果用户点击ctrl+C,它只会杀死g++进程,并继续执行您的程序,这可能会再次调用系统,因此您的程序将是不可修改的,并将继续肆无忌惮地执行。请参阅wait()/waitpid()函数,了解如何取消设置system()返回的内容。@LX75249“undefined”并不意味着“无法工作”,它意味着“可能会或可能不会像您预期的那样工作,并且可能会做一些完全不同的事情”@LX75249“undefined”并不意味着“无法工作”,它意味着“可能会或可能不会像您期望的那样工作,可能会做一些完全不同的事情”我看到了QProcess::waitForStarted(int)…是否有任何方法在使用过多内存时终止进程?我看到了QProcess::waitForStarted(int)…是否有任何方法在使用过多内存时终止进程?
void work(const QString &order)
{
   system(order.toUtf8().constData());
}