2011-04-16 106 views
1

當我打電話系統()的長字符串(它包含一些中國字),參數在linux C++系統()中,Qt的

系統()似乎不正確對待我的參數。

例如什麼系統()收到不符合我送

//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的代表路徑與一些中國字

+1

您應該檢查系統( )的返回值,尤其是當你在循環中調用work()的時候。否則,如果用戶點擊CTRL + C,它只會殺死G ++程序,並繼續你的計劃,該計劃可能會再次調用系統的執行,使你的程序將無法終止的是,將不顧一切地繼續執行。看到等待()/ waitpid函數()函數來看看如何unterpret什麼系統()返回。 – BatchyX 2011-04-16 14:05:34

回答

3

如果您使用的是Qt,那麼它最好使用QProcess而非system,看到here

+0

我看到另外,QProcess :: waitForStarted(INT)..是有什麼在使用太多內存時會殺死進程? – LX75249 2011-04-17 11:42:21

0

按照documentation for toLocal8Bit()相同

返回的字節數組是UND efined 如果字符串包含不 由當地8位編碼支持的字符。

我假設你使用的是不支持中國漢字。您不妨試試toUtf8

+0

,但如果命令很短,則效果很好。 – LX75249 2011-04-16 13:03:00

+1

@ LX75249「未定義」並不意味着「將無法正常工作」,它的意思是「可能還是因爲你可能無法正常工作,可能會做一些完全不同的」 – rlc 2011-04-16 14:22:03

3

將字符串轉換爲UTF-8,並傳遞到system()

void work(const QString &order) 
{ 
    system(order.toUtf8().constData()); 
}