編號喜歡做一個簡單的函數,即返回兩個字符串的值。Android JNI C簡單追加函數
基本上:
的java
public native String getAppendedString(String name);
Ç
jstring Java_com_example_hellojni_HelloJni_getAppendedString(JNIEnv* env, jobject thiz, jstring s) {
jstring sx = (*env)->GetStringUTFChars(env, s, NULL);
return ((*env)->NewStringUTF(env, "asd ")+sx);
}
其說
JNI /你好-jni.c:32:警告:初始化從指針丟棄限定符目標類型 jni/hello-jni.c:34:錯誤:無效的操作數爲二進制+(有'char *'和'char *')
retval將是:「asd qwer」,我該怎麼做?
編輯
jstring s1 = (*env)->NewStringUTF(env, "456");
jstring s2 = (*env)->NewStringUTF(env, "123");
jstring sall=strcat(s1, s2);
return sall;
只返回 「456」
編輯#3的LAST
的最終工作的代碼是:
jstring Java_com_example_hellojni_HelloJni_getAppendedString(JNIEnv* env, jobject thiz, jstring s1) {
D("HMMMMMMMMMMMMMMMMMMM");
jstring s2 = (*env)->NewStringUTF(env, "123");
jbyte *s1x = (*env)->GetStringUTFChars(env, s1, NULL);
jbyte *s2x = (*env)->GetStringUTFChars(env, s2, NULL);
char *sall = malloc(strlen(s1x) + strlen(s2x) + 1);
strcpy(sall, s1x);
strcat(sall, s2x);
jstring retval = (*env)->NewStringUTF(env, sall);
(*env)->ReleaseStringUTFChars(env, s1, s1x);
(*env)->ReleaseStringUTFChars(env, s2, s2x);
free(sall);
return retval;
}
謝謝,Leslie
這段代碼不工作,它給我很多Logcat中的錯誤,只是強制關閉而沒有「更加緊密」的消息。 – lacas
和大量的內存地址是在我的LogCat與綠色... – lacas
是的,你是對的,我忘了'strcat'如何工作。 –