开发者社区> 问答> 正文

请大神帮忙看看这个 jni 的问题?报错

jstring Java_com_example_jni_MainActivity_get(JNIEnv *env, jobject obj, jstring str){


// C中声明字符串的方式
// 1,char string0[10];
// 2,char string1[]="prison break";
// 3,char string2[100]="michael scofield";


jstring st = "sdsda";
char *cstr = NULL;
jint len = 0;


//len = (env)->GetStringLength(env, st);
//cstr = (char
)malloc(len * sizeof(len + 1));
//(*env)->GetStringUTFRegion(env, st, 0, len, cstr);
//return (*env)->NewStringUTF(env, cstr);


return st;`

}

上面两种方式返回jstring都会报错

我想直接这样声明  jstring=“aaa”; 没有问题吧!

我查了资料,猜想是不是编码大小问题,如果是这个问题,那么jstring=“aaa”;是什么类型的编码

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

    肯定有问题啊,首先c语言没有string的概念只是char指针,c++封装后才有的string类型,你这直接赋值没有道理的typedefjobjectjstring;这是jni.h的声明,而且jni的jstring只能用env去调用newstringutf的方法去构造<atarget='_blank'>@命运的遗迹typedeflongjint;这些都在头文件里声明,所以可以出现,他们主要是用来和java类型交互的,j开头的就是标识java中的类型,他们的主要功能是和c/c++的类型进行转换,以方便写c/c++的代码,但是返回给Java的只能是jxx的类型嗯!非常同意的讲解!但是我讴歌疑问就是,为什么在.c文件中可以出现jtring呢,或者说其他的jintjboolean....等!这些代表的是什么啊!我对这个始终有点疑惑!请指点下!还有就是jintjstring等这些有什么意义呢

    2020-06-09 16:22:12
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载