Android Studio 2.3.2 Gradle实验0.9.2 最后一个NDK。 我在C中编写了一个小函数,它通过Java中的JNI调用,但返回一个字符串,该字符串不应该在那里。 这是C函数:android ndk c函数返回奇怪值
char * text() {
char * txt = "a";
char * ret = malloc(strlen(a)+2);
strcat(ret,txt);
strcat(ret,"b");
return ret;
}
这是JNI C返回到Java的
JNIEXPORT jstring JNICALL
Java_com_myapp_Main_getMsg(JNIEnv *env, jobject instance, jstring var)
{
char * msg = text();
return (*env)->NewStringUTF(env, msg);
}
这是Java调用:
static {
System.loadLibrary("myapp");
}
public native String getMsg(String var);
String stringreturnedfromC = getMsg("eee");//eee is not used
这个节目是:
_Main_getMsg ab
但应该只返回“ab”。
这是一个奇怪的行为。为什么?我怎样才能得到正确的字符串?
'的strlen(一)'什么是?什么是len? – greenapps
用strcpy()替换第一个strcat()。 – greenapps
#greenapps strlen返回字符串的长度,我必须用它来分配内存。 我尝试替换strcat()。 – Daniele