java代码如下:
public class TestJni {
private static native void print(School s);
public static void main(){
School s = new School();
print(s);
}
}class School{
String[] studentNames = {"tom","jack","sophia"};
}在C代码中,如何把这个s.studentNames转化成为char**呢?
我写了一个ReadStringArray()的函数,但是是有问题的,在原有字符串后面会加几个乱码。char** ReadStringArray(JNIEnv * env, jclass jc, jobject jo, char* name, int size){
jfieldID id_array = env->GetFieldID(jc,name,"[Ljava/lang/String;");
jobjectArray joa_array = (jobjectArray)env->GetObjectField(jo,id_array);
char** stringArray = new char*[size];
for(int i = 0; i < size; i++){ jobject obj_string = env->GetObjectArrayElement(joa_array,i);
jclass class_string = env->GetObjectClass(obj_string);
jfieldID id_value = env->GetFieldID(class_string,"value","[C");
jcharArray jca_value = (jcharArray)env->GetObjectField(obj_string,id_value);
int jca_size = env->GetArrayLength(jca_value);
jchar* temp = env->GetCharArrayElements(jca_value,0);
stringArray[i] = new char[jca_size];
for(int j = 0; j < jca_size; j++){
stringArray[i][j] = (char)temp[j];
}
}
return stringArray;
}请高手指教。
public class TestJni {
private static native void print(School s);
public static void main(){
School s = new School();
print(s);
}
}class School{
String[] studentNames = {"tom","jack","sophia"};
}在C代码中,如何把这个s.studentNames转化成为char**呢?
我写了一个ReadStringArray()的函数,但是是有问题的,在原有字符串后面会加几个乱码。char** ReadStringArray(JNIEnv * env, jclass jc, jobject jo, char* name, int size){
jfieldID id_array = env->GetFieldID(jc,name,"[Ljava/lang/String;");
jobjectArray joa_array = (jobjectArray)env->GetObjectField(jo,id_array);
char** stringArray = new char*[size];
for(int i = 0; i < size; i++){ jobject obj_string = env->GetObjectArrayElement(joa_array,i);
jclass class_string = env->GetObjectClass(obj_string);
jfieldID id_value = env->GetFieldID(class_string,"value","[C");
jcharArray jca_value = (jcharArray)env->GetObjectField(obj_string,id_value);
int jca_size = env->GetArrayLength(jca_value);
jchar* temp = env->GetCharArrayElements(jca_value,0);
stringArray[i] = new char[jca_size];
for(int j = 0; j < jca_size; j++){
stringArray[i][j] = (char)temp[j];
}
}
return stringArray;
}请高手指教。
jfieldID id_array = env->GetFieldID(jc,name,"[Ljava/lang/String;");
jobjectArray joa_array = (jobjectArray)env->GetObjectField(jo,id_array);
char** stringArray = new char*[size];
for(int i = 0; i < size; i++){ jobject obj_string = env->GetObjectArrayElement(joa_array,i);
jclass class_string = env->GetObjectClass(obj_string);
jfieldID id_value = env->GetFieldID(class_string,"value","[C");
jcharArray jca_value = (jcharArray)env->GetObjectField(obj_string,id_value);
int jca_size = env->GetArrayLength(jca_value);
jchar* temp = env->GetCharArrayElements(jca_value,0);
stringArray[i] = new char[jca_size+1];
for(int j = 0; j < jca_size; j++){
stringArray[i][j] = (char)temp[j];
}
stringArray[i][jca_size]='\0'; }
return stringArray;
}即可,求高手给更野的解决方案。
jfieldID id_array = env->GetFieldID(jc,name,"[Ljava/lang/String;");
jobjectArray joa_array = (jobjectArray)env->GetObjectField(jo,id_array);
int size = env->GetArrayLength(joa_array);
const char** stringArray = new const char*[size]; for(int i = 0; i < size; i++){
jstring js_string = (jstring)env->GetObjectArrayElement(joa_array,i);
stringArray[i] = env->GetStringUTFChars(js_string,0);
}
return stringArray;
}