Android Studio 2.3.2 Gradle实验0.9.2 最后的NDK。 我在C中编写了一个小函数,它通过Java中的JNI调用,但返回一个字符串,该字符串位于不应存在的字符之前。 这是C函数:
char * text() {
char * txt = "a";
char * ret = malloc(strlen(a)+2);
strcat(ret,txt);
strcat(ret,"b");
return ret;
}
这是返回Java的JNI C
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"。
这是一种奇怪的行为。为什么?我怎样才能得到正确的字符串?
答案 0 :(得分:0)
注意到您的功能文字()不正确。
做这样的事情
char * text() {
char * txt = "a";
char * ret = (char *)malloc(strlen(txt)); //malloc(strlen(a)+2); is incorrect statment
strcat(ret,txt);
strcat(ret,"b");
return ret;
}