如何使用jni替换c中java中字符串数组的值?
这是我的jni函数,我必须在其中替换从java传递的数组中的值 请告诉我怎么做如何使用jni替换c中java中字符串数组的值?,java,c,java-native-interface,arrays,Java,C,Java Native Interface,Arrays,这是我的jni函数,我必须在其中替换从java传递的数组中的值 请告诉我怎么做 JNIEXPORT void JNICALL Java_com_example_finals_Strpass_intake (JNIEnv *env, jobject obj, jobjectArray dev){ jfieldID myNamesID; /* store the field ID */ int i=0; jstring myStr; char* myStr2;
JNIEXPORT void JNICALL Java_com_example_finals_Strpass_intake
(JNIEnv *env, jobject obj, jobjectArray dev){
jfieldID myNamesID; /* store the field ID */
int i=0;
jstring myStr;
char* myStr2;
char* myNames[] = {"Hello "};
LOGI("before class call ");
// Get a reference to obj’s class
jclass cls = (*env)->GetObjectClass(env,obj);
LOGI("before id call ");
myNamesID = (*env)->GetStaticFieldID(env,cls, "myDevNames", "[Ljava/lang/String;");
// Get the object field
LOGI("before dev call ");
dev =(*env)->GetStaticObjectField(env,cls,myNamesID);
LOGI("before for loop call ");
for (i=0; i<1; i++) {
LOGI("before myStr ");
myStr = (*env)->NewStringUTF(env,"gk");
(*env)->SetObjectArrayElement(env,dev,i,myStr);
}
(*env)->ReleaseCharArrayElements(env, dev, myStr, 0);
LOGI("after release");
}
JNIEXPORT void JNICALL Java\u com\u示例\u期末考试\u Strpass\u录取
(JNIEnv*env、jobject对象、jobject阵列开发){
jfieldID myNamesID;/*存储字段ID*/
int i=0;
jstring-myStr;
char*myStr2;
char*myNames[]={“Hello”};
LOGI(“课前电话”);
//获取对obj类的引用
jclass cls=(*env)->GetObjectClass(env,obj);
LOGI(“id呼叫前”);
myNamesID=(*env)->GetStaticFieldID(env,cls,“myDevNames”,“[Ljava/lang/String;”);
//获取对象字段
LOGI(“开发呼叫前”);
dev=(*env)->GetStaticObjectField(env、cls、myNamesID);
LOGI(“循环调用之前”);
对于(i=0;iNewStringUTF(env,“gk”);
(*env)->SetObjectArrayElement(env、dev、i、myStr);
}
(*env)->发布特征元素(env,dev,myStr,0);
LOGI(“发布后”);
}
JNIEXPORT void JNICALL Java\u com\u示例\u contchar23914\u chararclass\u摄入
(JNIEnv*env,jobject作业,jobjectArray ptr)
{
myNamesID=(*env)->GetStaticFieldID(env,cls,“arr”,“[Ljava/lang/String;”)
ptr=(*env)->GetStaticObjectField(env、cls、myNamesID);
对于(i=0;iGetObjectArrayElement(env,ptr,i);
myStr=(*env)->NewStringUTF(env,myNames[i]);
(*env)->SetObjectArrayElement(env、ptr、i、myStr);
}
(*env)->释放特征元素(env、ptr、stringg,0);
}我是用c来做的。在c中,没有Java这样的函数。如果你想用c来做,为什么这个问题被标记为Java?因为jni是Java的一部分,我得到的输出必须显示在Java ui中。所以回到我的原始注释,如果你有Java中可用的字符串,你想用So来替换这些值否则,为什么
String.replace
不是一个好主意?因为我必须替换c brother中的值。我必须从java获取特定的字符串数组,并根据c中的逻辑替换它以前的值。别忘了初始化变量
jclass cls = (*env)->GetObjectClass(env,job);
ptr =(*env)->GetStaticObjectField(env,cls,myNamesID);
for (i=0; i < len; i++) {
stringg = (*env)->GetObjectArrayElement(env, ptr,i);
myStr = (*env)->NewStringUTF(env,myNames[i]);
(*env)->SetObjectArrayElement(env,ptr,i,myStr);
}
(*env)->ReleaseCharArrayElements(env, ptr, stringg, 0);