JNI - PASS ARGUMENT. string

.c file:

#include <stdio.h>
#include <jni.h>
#include <stdlib.h>
#include <string.h>
#include "Prompt.h"

JNIEXPORT jstring JNICALL Java_Prompt_getLine
  (JNIEnv *env, jobject this, jstring prompt){
	char buf[128];	
	const jbyte *str;
	str = (*env)->GetStringUTFChars(env, prompt, NULL);
	
	//There are two methods to get the length of a String.
	//1. strlen(jbyte cstring)
	//2. (*env)->GetStringUTFLength(env, prompt)
	printf("The length of String is (by str.strlen) : %d\n",(int)strlen(str));
	printf("The length of String is (by GetStringUTFLength) : %d\n",(int)(*env)->GetStringUTFLength(env, prompt));
	
	if (str == NULL){
		return NULL;	
	}
	printf("%s", str);
	(*env)->ReleaseStringUTFChars(env, prompt, str);
	scanf("%s" , buf);
	return (*env)->NewStringUTF(env,buf);
}

.java file

class Prompt{
	//native method that prints a prompt and reads a line
	private native String getLine(String prompt);

	public static void main(String args[]){
		Prompt p = new Prompt();
		String input = p.getLine("Type a line : ");
		System.out.println("User typed : " + input);
	}

	static {
		System.loadLibrary("Prompt");
	}

}


How to pass a string to Native c:

1. use jstring as a parameter.
2. convert it to c:
	const jbyte *str;
	str = (*env)->GetStringUTFChars(env, prompt, NULL);

Two ways to get the length of String

1.  strlen(jbyte* str)
2.  
(*env)->GetStringUTFLength(env, prompt)

How to construct a new String

<span style="white-space:pre">	</span>(*env)->NewStringUTF(env,buf);


Other methods to get a String

GetStringCritical

jstring jstr1;
jchar *s1;
s1 = (*env)->GetStringCritical(env,jstr1);
/*
      use s1.
*/
(*env)->ReleaseStringCritical(env,jstr1,s1);

GetStringUTFRegion

jstring prompt

char outbuf[128];
int len = (*env)->GetStringLength(env, prompt);
(*env)->GetStringUTFRegion(env,prompt,0,len,outbuf);




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值