Я пытаюсь сделать 2D массив символов в качестве аргумента из кода Java, скопировать его в массив в C и использовать массив в моем коде C, как показано ниже:2D Массивы в JNI
JNIEXPORT void JNICALL Java_Map_fillMap(JNIEnv *env, jobject thisObj, jcharArray mapFromJava) {
jsize len = (*env)->GetArrayLength(env, mapFromJava);
jchar *mapArray = (*env)->GetCharArrayElements(env, mapFromJava, 0);
int size = sizeof(char) * 19 * 9;
memcpy(map, mapArray, size);
} Когда я пытаюсь распечатать массив 2d, я получаю по существу тарабарщину, которая, как представляется, из файла библиотеки DLL.
EDIT1 В настоящее время хранит только первое значение для каждого из массивов второго измерения. Im unsure о том, как получить второй цикл для итерации по этому измерению и скопировать каждый элемент с помощью memcpy.
JNIEXPORT void JNICALL Java_CGameLogic_fillMap(JNIEnv *env, jobject thisObj, jobjectArray mapFromJava) {
int i;
for(i=0; i<len1; i++) {
jcharArray array = (*env)->GetObjectArrayElement(env,mapFromJava, i);
int len2 =(*env)->GetArrayLength(env, array);
jchar *mapArray = (*env)->GetCharArrayElements(env, array, 0);
int j;
for (j=0;j< len2; j++) {
memcpy(map[i], mapArray, sizeof(char));
}
}
}
Этот ответ, вероятно, поможет вам: http://stackoverflow.com/a/6752105/4756299 –