编号喜欢做一个简单的函数,即返回两个字符串的值。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'如何工作。 –