将参数传递给java中的c代码

时间:2013-05-08 11:22:14

标签: java

如何将参数传递给C程序,该程序从某些输入流获取输入 (如 scanf())来自已保存的文本文件,我在 java中使用 Runtime.getRuntime()。exec()运行.exe

2 个答案:

答案 0 :(得分:1)

Runtime.exe允许您指定要执行的程序以及程序的参数。看看Java API documentation for exec


   String[] command = new String[2];
   command[0] = "c:\\bin\\someProgram.exe";
   command[1] = "c:\\data\\arguments.txt";
   Runtime.getRuntime().exec(command);

如果C程序的数据已经存储在一个文件中,你应该直接传递文件作为参数(当然,这取决于程序的确切性质和所需的任何预处理 - 你'我需要向我们提供更好答案的详细信息。)

答案 1 :(得分:1)

在我看来,您希望将数据从文件传递到您的程序,而不是以交互方式进行。您可以使用I / O重定向。在unix哲学everything is a file中,这会有所帮助,因为您的输入流stdin也是一个文件。

让我用一个例子说明这一点。我会张贴一个

int main(){
  int a, b;
  std::cin >> a >> b;
  std::cout << a+b << std::endl;
  return 0;
}

您可以使用类似g++ sum.cpp的内容进行编译,然后运行

./a.out 
3 4

按照您的预期打印7。但是你必须手动输入这些数据,如果这些数据保持不变,那么一遍又一遍地输入这个数据是没有意义的。这是I / O重定向。我们想要做的是告诉程序,而不是从stdin读取,它应该从另一个文件中读取。

要对此进行测试,请创建一个简单的文本文件input.text,其中包含3 4作为其内容。现在使用./a.out < input.txt运行此程序,如果您更改文件中的数字并再次运行程序,这将再次打印7

所以你要做的事情与Java或C或scanf或其他一些输入方式无关。作为旁注,而不是使用Runtime,您应该考虑使用commons exec。 为了更好地理解重定向,请阅读thisthis

注意:由于您提到要运行exe个文件,我假设您运行的是Windows。您可能需要将a.out更改为a.exe或您的ide将其编入的名称。希望如果我没有清楚地解释清楚,请随时告诉我。