2013-06-26 32 views
1

我正在編寫軟件,需要在main()的底部對Weka進行系統調用。通話如下:C++中的系統調用問題

printf("Creating neural netowrk...\n"); 
system("\" java -cp \"FILEPATH\weka.jar\" weka.classifiers.functions.MultilayerPerceptron -t \"ML_data.arff\" -d \"MLPnn.model\" \""); 
printf("Neural network created.\n"); 

但是控制檯彈出Creating neural network...並永遠不會前進。

我試過在窗口本身輸入命令,它工作正常。我很確定所有的文件路徑/引用都是正確的,因爲之前我遇到過麻煩,並且給了我錯誤。現在看來程序卡住了。

應該指出的是,這個系統調用已經工作過,並且保持不變。圍繞它的程序發生了巨大的變化,但正如我所說,這實際上是第一套被執行的指令。

有沒有一種方法來解決這個問題,或對問題的常見解決方案?我對system調用的內部機制並沒有很好的想法,並且想知道可能的根本原因(內存,硬件等)。

+1

命令行似乎是多餘的報價荒謬不堪重負 –

+0

我不。 t像「java」前面的空格,或者整個系統參數字符串是如何被雙引號的,但我不確定這會導致問題,沒有任何其他症狀(如錯誤返回值) –

+0

你可以在被調用的程序中打印一些東西嗎?另外,當測試這樣的東西時,在第二個'prin之後執行'fflush(stdout)'可能是一個好主意tf'。 – unxnut

回答

1

嘗試:

system("java -cp \"FILEPATH\\weka.jar\" weka.classifiers.functions.MultilayerPerceptron -t \"ML_data.arff\" -d \"MLPnn.model\" "); 

只是刪除了第一個「\「」,並增加了額外的‘\’FILEPATH後

+0

這個didn沒有工作我在這裏的一篇文章中讀到'system'調用'cmd'來執行調用,所以參數必須被包裹在一個額外的引號集中,就像我有的一樣。缺少FILEPATH之後的雙斜槓在我的文章中是一個錯字。 – aquemini