从java向c代码传递参数

从java向c代码传递参数,java,Java,如何将参数传递给从一些inputstreams获取输入的C程序 (如scanf())来自已保存的文本文件,我使用java中的Runtime.getRuntime().exec()运行.exe。Runtime.exe允许您指定要执行的程序以及程序的参数。看一看这张照片 如果C程序的数据已经存储在一个文件中,您应该直接将该文件作为参数传递(当然,这取决于程序的确切性质和所需的任何预处理——您需要为我们提供详细信息以获得更好的答案).在我看来,您希望将数据从文件传递到程序,而不是以交互方式进行传递。您

如何将参数传递给从一些inputstreams获取输入的C程序
(如scanf())来自已保存的文本文件,我使用java中的Runtime.getRuntime().exec()运行.exe。
Runtime.exe
允许您指定要执行的程序以及程序的参数。看一看这张照片


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

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

让我用一个例子来说明这一点。我会发一封信

int main(){
  int a, b;
  std::cin >> a >> b;
  std::cout << a+b << std::endl;
  return 0;
}
这将按您的预期打印
7
。但是您必须手动输入此数据,如果此数据保持不变,则反复输入此数据是没有意义的。这里是I/O重定向。我们要做的是告诉程序,它应该从另一个文件读取,而不是从
stdin
读取

要测试这一点,请创建一个简单的文本文件
input.text
,其内容为
34
。现在用
/a.out
运行该程序,如果更改文件中的数字并再次运行该程序,将再次打印
7
,您将获得适当的结果

因此,您试图做的与Java、C、scanf或其他获取输入的方式无关。作为一个旁注,而不是使用<代码>运行时< /代码>,您应该考虑使用<代码>公有执行程序> /代码>。 要更好地理解重定向,请阅读和


注意:由于您提到要运行
exe
文件,我假定您运行的是windows。您可能需要将
a.out
更改为
a.exe
或ide编译成的任何名称。如果我没有解释清楚,请随时告诉我。

创建包含要传递的数据的文本文件不是更容易吗?这是一个奇怪的问题…@Fabiotocchi可能是家庭作业。你的问题不清楚。C程序是从自己打开的文本文件中读取输入,还是从
stdin
中读取输入,然后希望Java程序将文本文件的内容传递给它?如果是前者,文本文件的名称是在C文件中硬编码的,还是它期望它作为一个参数?@millimoose奇怪的家庭作业现在…这个答案有点轻物质。。。此外,OP似乎已经到了运行程序的地步。这类问题不多,但我想OP可能会对如何传递参数感到困惑-
exec
的文档不是很清楚。是的,但在这种情况下,我倾向于要求澄清,并将问题隐藏起来,如果没有人愿意,而不是将代码片段扔到墙上,看哪一个粘在墙上。谢谢你的回答@TonythePony,我想要同样的东西,但即使我的c程序没有接受命令行参数,它也能自动获取值吗?谢谢nikhil对于答案,但这并不完全是我想要的,我仍然使用输入/输出重定向得到了答案,谢谢
int main(){
  int a, b;
  std::cin >> a >> b;
  std::cout << a+b << std::endl;
  return 0;
}
./a.out 
3 4