这是JNI代码。
Java代码:

public class Sample1 {

    public native String stringMethod(String text);

    public static void main(String[] args)
    {
       System.loadLibrary("Sample1");
       Sample1 sample = new Sample1();

       String  text   = sample.stringMethod("world");

       System.out.println("stringMethod: " + text);
   }
}
stringMethod函数的Cpp方法:
JNIEXPORT jstring JNICALL Java_Sample1_stringMethod
   (JNIEnv *env, jobject obj, jstring string) {

 const char *name = env->GetStringUTFChars(string, NULL);//Java String to C Style string
 char msg[60] = "Hello ";
 jstring result;

 strcat(msg, name);
 env->ReleaseStringUTFChars(string, name);
 puts(msg);
 result = env->NewStringUTF(msg); // C style string to Java String
 return result;
 }
运行我的Java代码时。我得到下面的结果。
stringMethod: world
但是我在字符串“world”后附加了“Hello”。我也在这里返回附加的字符串。但是为什么我只得到“世界”而不是“Hello World”。真的,我对此代码感到困惑。我应该怎么做才能得到带有附加字符串的结果?

最佳答案

这应该是这样做的方法。

JNIEXPORT jstring JNICALL Java_Sample1_stringMethod
    (JNIEnv *env, jobject obj, jstring string)
{
    const char *name = (*env)->GetStringUTFChars(env,string, NULL);
    char msg[60] = "Hello ";
    jstring result;

    strcat(msg, name);
    (*env)->ReleaseStringUTFChars(env,string, name);
    puts(msg);
    result = (*env)->NewStringUTF(env,msg);
    return result;
}

关于string - JNI程序中的jstring返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13796786/

10-13 03:37