开发者社区> 问答> 正文

下面这个代码有什么问题吗?调用的时候报错,请大神们帮忙看一下,谢谢?报错

char* jstringTostring(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("utf-8");
jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr, mid, strencode);
jsize alen = env->GetArrayLength(barr);
jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);
if (alen > 0)
{
rtn = (char*)malloc(alen + 1);

memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
env->ReleaseByteArrayElements(barr, ba, 0);
return rtn;
}

展开
收起
爱吃鱼的程序员 2020-06-08 20:24:23 416 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    起码把报的错误贴出来吧,不过我认为你应该在java层就把String对象转成byte[],jni中byte[]转char*就简单多了,没必要用那些反射方法。

    在java中调用这个接口,排除了其他问题

    <imgsrc="https://static.oschina.net/uploads/space/2016/1202/140147_fd0q_2971862.png"alt="">

    <divclass="ref">

    引用来自“礼物语”的评论

    在java中调用这个接口,排除了其他问题

    <imgsrc="https://static.oschina.net/uploads/space/2016/1202/140147_fd0q_2971862.png"alt="">

    2020-06-08 20:24:40
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
《0代码搭应用》 立即下载
不止代码 立即下载
fibjs 模块重构从回调到协程--陈垒 立即下载

相关实验场景

更多