char* argv[] 指针数组传入jni

比如说c中有 int safe(int argc,char* argv[]){}char* argv[] 这个指针数组 怎么传到jni中?如果 写成这样

public class Safe {
 public native static int safe(int argc, String[] argv);
 static { 
System.loadLibrary("safe"); 
}
}

而本地方法中

JNIEXPORT jint JNICALL Java_Safe_safe(JNIEnv *env, jclass cl, jint argc, jobjectArray argv)
{ int j; jobject x = (*env)->GetObjectArrayElement(env,argv,j);}

又怎么把这个x 转成原来一样的指针数组char* argv[]?

在java中,String[]类型是对象,所以在jni中对应的是jobjectArray

用GetObjectArrayElement()获得该对象

给出例子:

//对数组中的每一个字符串进行转化

JNIEXPORT void JNICALL Java_test_D_printsome
  (JNIEnv * env, jobject jobj, jobjectArray array){
   jsize len = (*env)->GetArrayLength(env, array);
   char str[10][128];
   int i;
   for(i = 0; i < len; i++){
    //获得jobject对象,并将jobject对象向jstring对象转化
    jstring string = (jstring)((*env)->GetObjectArrayElement(env, array, i));//获得array对象
    const char * row = (*env)->GetStringUTFChars(env, string, 0);//将jstring类型转化为char类型
    strcpy(str[i], row);
   }
  for(i = 0; i < len; i++){
   printf("%s", str[i]);
  }
}
(*env)->ReleaseStringUTFChars(env,jrow,row);//释放jni



jstring string = ((*env)->GetObjectArrayElement(env, array, i))
这句还可以改成:

jobject  x = (*env)->GetObjectArrayElement(env, arrar, i);

jstring string = (jstring)x;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值