C++ linux C+中system()的参数+;,Qt
当我用一个长字符串(它包含一些汉字)调用system()时 system()似乎无法正确处理我的参数 e、 g.接收的系统()与我发送的系统()不同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. } 当我打电
//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());
}