如何在c语言中使用java传入的String

   更新日期:2024.05.28
如何在c语言中使用java传入的字符串s,也就是说如何使用jstring类型。那么在c语言实现中如何使用传入的字符串s?
我们知道java中的String,c语言中应该对应的是char*类型,也就是说我们在jni的c语言实现中如何把jstring类型转换成为char*即可。
方法是这样的:

在c文件中声明char* str,然后
str= (char*)(*env)->GetStringUTFChars(env, jstring,NULL);
这样就可以得到传入的字符串,过程如下:

JNIEXPORT jstring JNICALLJava_Test_sayHello
(JNIEnv * env, jobject obj, jstring s)
{
char * str;
str=(char*)(*env)->GetStringUTFChars(env,s,NULL);
printf("%s",str);
(*env)->ReleaseStringUTFChars(env, s, str);
......
}
当然,java中有垃圾回收机制,二c语言没有,那么使用完该字符串之后该如何处理呢?字符串str使用完后,需要通知虚拟机平台相关代码无需再访问,方法是
(*env)->ReleaseStringUTFChars(env, jstring, str);

最后还要说一下,如果传入传出的字符串是中文,就又有问题了,我们需要手工进行uncode编码,否则就是乱码,当然如果程序设计合理,这里一般情况下尽量避免进行汉字的传递。
呵呵,就这样了!

  • 13817669768 :java如何调用c语言源文件并执行?
    魏盆郝2801 :答:要在java中调用c语言的库,需要使用Java提供了JNI。举例说明 在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示Hello Word.现在分别从Java和C语言两部分说明:1. Java 部分 首先定义一个HelloNative,在其中申明sayHello函数,函数要申明为Native 类型的.如下:public ...
  • 13817669768 :sleep()函数怎么具体在c语言中怎么用?
    魏盆郝2801 :答:Sleep方法是Java线程(Thread)开发中一种概念。是线程TIMED_WAITING状态中的一种方法。使用方法为:1、类名为创建线程的类名。2、Thread线程Sleep方法的示例代码如下图所示。让main方法运行过程中休眠5000毫秒。3、Thread线程Sleep方法的示例代码执行结果如下图所示。4、millis参数含义:以毫秒为单位的睡眠...
  • 13817669768 :Java如何调用C语言代码 ?
    魏盆郝2801 :答:通常有以下几种情况我们需要使用JNI来实现。 标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的 你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的 程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们 下面我们开始编写...
  • 13817669768 :C语言中带指的结构体如何在JAVA中实现相应定义
    魏盆郝2801 :答:添加到A节点的右孩子*/ TriTreeNode cTri = new TriTreeNode(); bTri.name = "C"; mTriTreeNode.mRightChild = cTri; /*再创建一个节点D,添加到B孩子的左节点上*/ TriTreeNode dTri = new TriTreeNode(); bTri.name = "D"; bTri.mLeftChild = dTri; }...
  • 13817669768 :如何用c语言来访问java的接口
    魏盆郝2801 :答:: 你这种情况比较复杂!能,用Jni接口。 你可以直接使用Jni接口,也可以网上下载jni包。 推荐使用jnative,很实用,我写驱动接口都用这个。
  • 13817669768 :编程新手必学:C语言和JAVA
    魏盆郝2801 :答:C语言和JAVA是编程界的元老级人物,经历了时间的考验,现在仍是主流语言,被广大学院派所推崇。学院都在教的语言,能是二三流无人问津的语言吗?前景广阔JAVA在Web开发领域大放异彩,而C语言虽然岗位不多,但同样不可或缺。学习C语言可以了解过程语言和对象语言的区别,掌握过程语言的精神,为后续学习打下基础。而且...
  • 13817669768 :如何在java中实现c语言中的联合的功能???
    魏盆郝2801 :答:C语言可以用一个指针值指向内存的任何一个空间,当然有很多非法的空间会被检测出来,所有乱用指针,编译器或者系统就会报错。但JAVA不同,JAVA 通过一个引用,来指向内存的一个空间,换句话说,不是你想指向哪里,就指向哪里,因为你定义个变量时,这个空间由系统分配,同样,你定义一个引用,这个空间...
  • 13817669768 :把下面C语言代码改成java代码
    魏盆郝2801 :答:import java.util.Arrays;import java.util.Scanner;public class A { static final int maxn=100000+5;static long[] a=new long[maxn],t=new long[maxn];static long ans=0;static void mymerge(int x,int m,int y) { int tx=x,tm=m+1;int k=0;while(tx<=m&& tm<=y) { if...
  • 13817669768 :JAVA如何调用C语言编写的程序,并且传参数,读取返回结果?
    魏盆郝2801 :答:Java_Sample1_stringMethod (JNIEnv *, jobject, jstring);JNIEXPORT jint JNICALL Java_Sample1_intArrayMethod (JNIEnv *, jobject, jintArray);ifdef __cplusplus } endif endif 这个文件主要是为了生成java调用c的主要方法,也即是上面的几个方法。3、用c语言的程序来实现上班生成的几个方法,...
  • 13817669768 :c语言中的scanf在java中应该怎么表达?
    魏盆郝2801 :答:1、使用 Scanner 类,Scanner 被称为输入流扫描器类,从控制台读取数据的 构造方法 如下:Scanner类在 java.util 包下,使用时要加 import java.util.Scanner;Scanner input = new Scanner(System.in);2、举例:Scanner s = new Scanner(System.in);//在控制台输入一个字符串,回车 String str =...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网