字符串是引用數據類型,不屬於基本數據類型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"); }