字符串是引用数据类型,不属于基本数据类型java
Java 使用unicode编码,C使用UTF-8,因此在操做中函数
C语言的字符串操做在头文件<string.h>
中编码
示例代码code
public native String sayHello(String string); public native String subStr(String string); public native String stringFromJNI();
JNIEXPORT jstring JNICALL Java_org_professor_jni_MainActivity_sayHello(JNIEnv *env, jobject instance, jstring string_) { //函数内部会分配内存空间 //JNI_FALSE 表明不拷贝jstring对象的字符串序列 //JNI_TRUE 表明拷贝jstring对象的字符串序列 const char *string = (*env)->GetStringUTFChars(env, string_, JNI_FALSE); //0表明JNI_FALSE char buff[100] = {"I am from C \n"}; strcpy(buff, string_); //释放函数内部内存空间 (*env)->ReleaseStringUTFChars(env, string_, string); return (*env)->NewStringUTF(env, buff); } JNIEXPORT jstring JNICALL Java_org_professor_jni_MainActivity_subStr(JNIEnv *env, jobject instance, jstring string_) { // const char *string = (*env)->GetStringUTFChars(env, string_, 0); //获取字符串长度 int strLength = (*env)->GetStringUTFLength(env, string_); char buffer[strLength]; //截取字符串长度 内存没有分配,不用调用ReleaseStringUTFChars (*env)->GetStringUTFRegion(env, string_, 5, strLength - 5, buffer); strcpy(buffer, "\n"); // (*env)->ReleaseStringUTFChars(env, string_, string); return (*env)->NewStringUTF(env, buffer); } JNIEXPORT jstring JNICALL Java_org_professor_jni_MainActivity_stringFromJNI(JNIEnv *env, jobject instance) { return (*env)->NewStringUTF(env, "I am form c"); }