Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jni替换c中java中字符串数组的值?_Java_C_Java Native Interface_Arrays - Fatal编程技术网

如何使用jni替换c中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;

这是我的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;
    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);