android ndk c函数返回奇怪的值

时间:2017-05-16 07:38:45

标签: android c android-ndk java-native-interface

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"。

这是一种奇怪的行为。为什么?我怎样才能得到正确的字符串?

1 个答案:

答案 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;
}