0

下面的c程序有两个参数a,b如果它与用户输入匹配,则打印值。我尝试在 Java 中运行 c 执行文件ProcessBuilder,但它不读取执行文件。

Java 代码

import java.io.*;
import java.lang.Runtime;
import java.lang.*;
import java.io.File;
import java.lang.ProcessBuilder;
public class arg
{
 public static void main(String[] args)
 {
  try
  {
   ProcessBuilder pb = new ProcessBuilder("path","-args[1]", "-args[2]");
   pb.redirectErrorStream(true); 
   Process p = pb.start();
   String s;
   BufferedReader stdInput = new BufferedReader(new 
                                           InputStreamReader(p.getInputStream()));
   BufferedReader stdError = new BufferedReader(new 
                                           InputStreamReader(p.getErrorStream()));
   OutputStream stdOutput =   p.getOutputStream();                      
   stdOutput.close();
   while ((s = stdInput.readLine()) != null)
   { System.out.println(s);    }    
     System.out.println("Done.");
     stdInput.close();              
  }//try
  catch (IOException ex) { ex.printStackTrace();    }
    } //void
  } //main

c代码

   #include <stdio.h>
   #include <sys/timeb.h>
   #include <string.h>
   main(int argc, char **argv)
   {
   setbuf(stdout, NULL);
   int i=1,j,n;
   char a,b;
   for (i=0; i<argc; i++)   
   { printf("%s\n", argv[i]); }

     if(!strcmp(argv[1],"a"))
     {
       if(!strcmp(argv[2], "b"))
       {    
       for( j = 0; j<= 4; j++ ) 
        { printf("Iteration[%d] %d\n",j, j); }
       }
       return 0 ;
    }
   } //main
4

2 回答 2

2

我不清楚您要做什么,但是如果您想ProcessBuilder从 java 命令行传递参数,那么您需要做

ProcessBuilder pb = new ProcessBuilder("path", args[0], args[1]); // Note, index starts with 0

你这样做的方式,你发送实际的字符串"arg[1]""arg[2]"你的命令。

于 2013-05-16T08:45:15.933 回答
0

你可能想写:

if (args.length >= 2)
    ProcessBuilder pb = new ProcessBuilder("path","-" + args[0], "-" + args[1]");

Java 参数也是从 0 开始索引的,而不是从 1 开始,第一个参数中没有程序名称,就像在 C 中一样。

于 2013-05-16T08:45:18.983 回答