2013-06-26 68 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