Подтвердить что ты не робот

Возврат jstring в программе JNI

Это код 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);    
   }
}

Cpp Метод для функции stringMethod:

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". На самом деле я смутил этот код. Что мне делать, чтобы получить результат с добавленной строкой?

4b9b3361

Ответ 1

это должен быть способ сделать это....

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