Tag: java

是否可以在Java中为C程序打印出诊断信息?

我想从java程序编译以下C代码(故意留下语法错误): /* Hello World program */ #include main() { printf(“Hello World”) } 我希望我的java程序编译C文件并在控制台中提供诊断。 示例:第4行; 预期和第5行无效的语法… 我已经安装了CodeBlock MinGW编译器,并且能够编译代码并打印出错误。 看看我做了什么: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class C_Compile { public static void main(String args[]){ String ret = compile(); System.out.println(ret); } public static String compile() { String log=””; String myDirectory = “C:\\”; try { String s= null; […]

从java程序调用C编译器

我有一个项目,我需要编译C程序。 该项目是Java。 我必须将程序带入JTextArea,(我使用Swing for GUI),针对测试文件运行它并将结果输出到另一个JTextArea。 但是我的代码似乎有些不对劲。 Process p = new ProcessBuilder(“c:\\MinGW\\bin\\cc.exe”, “program.c”).start(); program.c包含用户输入TextArea的程序,“c:\ MinGW \ bin \ cc.exe”是我的c编译器。 我检查过这不会引发任何exception。 它应该在我当前的目录中创建一个名为a.exe的文件,其中包含program.c文件,但它不是。正确的方法是什么? 我看到另外两个类似于此的post,但它们也没有为此提供简单的清洁解决方案。 另外,我必须在它之后运行创建的可执行文件。 提前致谢。

Runtime Exec意外停止

我在C中有一个可执行程序,可以为文件生成大量输出。 当我用Runtime调用这个程序时,像这样: Runtime r = Runtime.getRuntime(); Process p = null; p = r.exec(“./my_program -in input.file -out output.file”, null, new File(System.getProperty(“java.io.tmpdir”))); 当程序产生低输出时,一切都还可以,但是当我用大输入调用“* my_program *”时,它会向output.file产生大量输出,但在这种情况下,我的Java程序冻结并没有发生任何事情。 .. 我在终端中用很多大输入测试“* my_program *”并且一切正常,但是当我使用Runtime.exec用Java调用程序时,Java程序就会冻结。 – 提前致谢

JNI从c程序调用java方法

我需要从c程序中调用java方法。 我尝试过以下代码,通过Java本机接口调用java方法,但在编译时遇到问题。 我是C新手,有java经验。 所以,我无法想象自己在创建JVM时发生了什么。 以下是代码。 CTest.c #include #include JNIEnv* create_vm() { JavaVM* jvm; JNIEnv* env; JavaVMInitArgs args; JavaVMOption options[1]; args.version = JNI_VERSION_1_6; args.nOptions = 1; options[0].optionString = “-Djava.class.path=D:\\Ashish_Review\\JNI\\src”; args.options = options; args.ignoreUnrecognized = JNI_FALSE; JNI_CreateJavaVM(&jvm, (void **)&env, &args); return env; } void invoke_class(JNIEnv* env) { jclass helloWorldClass; jmethodID mainMethod; jobjectArray applicationArgs; jstring applicationArg0; helloWorldClass = […]

Printf:Java和C实现的差异

我今天注意到我不能使用*将宽度或精度参数传递给Java的printf实现。 也就是说, printf的以下参数在C中有效,但不是Java: “%*d”, 10, 3 “%-*d”, 10, 3 “%0*d”, 10, 3 “%*.5f”, 11, 1.0/9 “%-11.*f”, 5, 1.0/9 “%0*.*f”, 11, 5, 1.0/9 我应该注意哪些其他实现差异?

在java中的Shift操作实现

我最近在Java中使用了移位运算符,并注意到>>运算符与C中的>>具有相同的含义。在Java >>有符号移位使第一位保持相同的值。 在Java中,相当于C shift的是>>>运算符。 左移位运算符( << )与C中的相同,只是忽略第一位。 我想知道的是 为什么要做这个改变? 为什么符号不一致所以>>和<>>和<<<是无符号的? 签名class次运营商有用吗?

来自java程序的C程序编译

我正在尝试从Linux平台上的java程序编译ac程序。 我的片段是。 ProcessBuilder processBuilder = new ProcessBuilder(“/usr/bin/gcc”, “-c”,”/hipad/UserProject/example.c”); Process proc = processBuilder.start(); 编译java程序时没有错误,但我无法获得.o文件。 我试图找出解决方案,但没有人工作。 任何建议…..

C和JAVA中递增递减运算符的差异

请考虑以下声明: int a[]={1,2,3,4,5,6,7,8}; int i=0,n; n=a[++i] + i++ + a[i++] + a[i] ; 根据我的逻辑,n应该是10.但是我在c中得到不同的输出(输出是7)但是在java中我得到的预期结果是10.在增量和减量运算符在c中工作的方式有什么不同和java。 这是我的确切c和java代码: #include int main() { int a[]={1,2,3,4,5,6,7,8}; int i=0,n; n=a[++i] + i++ + a[i++] + a[i] ; printf(“%d”,n); getch(); return 0; } 输出的Java代码:10 public class HelloWorld{ public static void main(String []args){ int a[]={1,2,3,4,5,6,7,8}; int i=0,n; i=0; n=a[++i] + i++ + a[i++] […]

将编码为字符数组的C-ctyle字符串转换为Java字符串

我有一个C风格的字符串编码为Java中的字符数组,但我想将此数组转换为Java字符串。 我尝试使用匹配的构造函数调用, String toRet = new String(new char[]{‘B’,’A’,’D’,’\0′, ‘G’, ‘A’, ‘R’, ‘B’, ‘A’, ‘G’, ‘E’}); System.out.println(Arrays.toString(toRet.toCharArray())); 但结果是不正确的,事实上奇怪的错误。 以下是上述代码输出的内容: [B, A, D, 这就是我想要的 [B, A, D] 我在Ubuntu上运行openJdk6。 我还没有在其他VM上测试过上面的代码。

将图像数据从Java传递到C本机函数接受指针

我在外部.so文件中提供了一个C函数。 此function将图像数据作为输入,并提供压缩图像以及图像的长度作为输出。 function模板如下: char * OutputImage = CompressImage((char *)InputImage,(int)&lenOutImage); 在我的Java代码中,我将输入图像捕获为byte []数据类型。 现在我需要将它传递给上面提到的本机C函数。 能帮助我如何从Java实现这一目标吗?