问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

jni问题:返回NewStringUTF的jstring 是由jvm管理还是需要手动释放

发布网友 发布时间:2022-05-07 21:35

我来回答

1个回答

热心网友 时间:2023-11-14 18:21

有个需求,需要jni中返回jstring,由于一直在c++中使用string拼接字符串,所以返回得把string转成jstring,网上搜了下,非常麻烦,再加上我返回jstring用的统一接口是
env->NewStringUTF(result)
env为jni指针,result为const char*
所以想到先把string转成const char*,然后直接调用这个接口返回string,代码如下:

string str = "";
result = str.c_str();
return env->NewStringUTF(result);
如此编译so运行之后确实起初没发现没问题,本来也以为此方案OK,但是在红米note2上发现返回乱码,分析得知str.c_str()返回的指针会由于str的被回收而导致指向垃圾内容。如此一来转换解决方案如下:

char* c;
const int len = str.length();
c =new char[len+1];
strcpy(c,str.c_str());
const char* result = c;
return result;
如此将str里的内容赋值给一个const char*即可。

热心网友 时间:2023-11-14 18:21

有个需求,需要jni中返回jstring,由于一直在c++中使用string拼接字符串,所以返回得把string转成jstring,网上搜了下,非常麻烦,再加上我返回jstring用的统一接口是
env->NewStringUTF(result)
env为jni指针,result为const char*
所以想到先把string转成const char*,然后直接调用这个接口返回string,代码如下:

string str = "";
result = str.c_str();
return env->NewStringUTF(result);
如此编译so运行之后确实起初没发现没问题,本来也以为此方案OK,但是在红米note2上发现返回乱码,分析得知str.c_str()返回的指针会由于str的被回收而导致指向垃圾内容。如此一来转换解决方案如下:

char* c;
const int len = str.length();
c =new char[len+1];
strcpy(c,str.c_str());
const char* result = c;
return result;
如此将str里的内容赋值给一个const char*即可。

热心网友 时间:2023-11-14 18:21

有个需求,需要jni中返回jstring,由于一直在c++中使用string拼接字符串,所以返回得把string转成jstring,网上搜了下,非常麻烦,再加上我返回jstring用的统一接口是
env->NewStringUTF(result)
env为jni指针,result为const char*
所以想到先把string转成const char*,然后直接调用这个接口返回string,代码如下:

string str = "";
result = str.c_str();
return env->NewStringUTF(result);
如此编译so运行之后确实起初没发现没问题,本来也以为此方案OK,但是在红米note2上发现返回乱码,分析得知str.c_str()返回的指针会由于str的被回收而导致指向垃圾内容。如此一来转换解决方案如下:

char* c;
const int len = str.length();
c =new char[len+1];
strcpy(c,str.c_str());
const char* result = c;
return result;
如此将str里的内容赋值给一个const char*即可。

热心网友 时间:2023-11-14 18:21

有个需求,需要jni中返回jstring,由于一直在c++中使用string拼接字符串,所以返回得把string转成jstring,网上搜了下,非常麻烦,再加上我返回jstring用的统一接口是
env->NewStringUTF(result)
env为jni指针,result为const char*
所以想到先把string转成const char*,然后直接调用这个接口返回string,代码如下:

string str = "";
result = str.c_str();
return env->NewStringUTF(result);
如此编译so运行之后确实起初没发现没问题,本来也以为此方案OK,但是在红米note2上发现返回乱码,分析得知str.c_str()返回的指针会由于str的被回收而导致指向垃圾内容。如此一来转换解决方案如下:

char* c;
const int len = str.length();
c =new char[len+1];
strcpy(c,str.c_str());
const char* result = c;
return result;
如此将str里的内容赋值给一个const char*即可。

热心网友 时间:2023-11-14 18:21

有个需求,需要jni中返回jstring,由于一直在c++中使用string拼接字符串,所以返回得把string转成jstring,网上搜了下,非常麻烦,再加上我返回jstring用的统一接口是
env->NewStringUTF(result)
env为jni指针,result为const char*
所以想到先把string转成const char*,然后直接调用这个接口返回string,代码如下:

string str = "";
result = str.c_str();
return env->NewStringUTF(result);
如此编译so运行之后确实起初没发现没问题,本来也以为此方案OK,但是在红米note2上发现返回乱码,分析得知str.c_str()返回的指针会由于str的被回收而导致指向垃圾内容。如此一来转换解决方案如下:

char* c;
const int len = str.length();
c =new char[len+1];
strcpy(c,str.c_str());
const char* result = c;
return result;
如此将str里的内容赋值给一个const char*即可。

热心网友 时间:2023-11-14 18:21

有个需求,需要jni中返回jstring,由于一直在c++中使用string拼接字符串,所以返回得把string转成jstring,网上搜了下,非常麻烦,再加上我返回jstring用的统一接口是
env->NewStringUTF(result)
env为jni指针,result为const char*
所以想到先把string转成const char*,然后直接调用这个接口返回string,代码如下:

string str = "";
result = str.c_str();
return env->NewStringUTF(result);
如此编译so运行之后确实起初没发现没问题,本来也以为此方案OK,但是在红米note2上发现返回乱码,分析得知str.c_str()返回的指针会由于str的被回收而导致指向垃圾内容。如此一来转换解决方案如下:

char* c;
const int len = str.length();
c =new char[len+1];
strcpy(c,str.c_str());
const char* result = c;
return result;
如此将str里的内容赋值给一个const char*即可。

热心网友 时间:2023-11-14 18:21

有个需求,需要jni中返回jstring,由于一直在c++中使用string拼接字符串,所以返回得把string转成jstring,网上搜了下,非常麻烦,再加上我返回jstring用的统一接口是
env->NewStringUTF(result)
env为jni指针,result为const char*
所以想到先把string转成const char*,然后直接调用这个接口返回string,代码如下:

string str = "";
result = str.c_str();
return env->NewStringUTF(result);
如此编译so运行之后确实起初没发现没问题,本来也以为此方案OK,但是在红米note2上发现返回乱码,分析得知str.c_str()返回的指针会由于str的被回收而导致指向垃圾内容。如此一来转换解决方案如下:

char* c;
const int len = str.length();
c =new char[len+1];
strcpy(c,str.c_str());
const char* result = c;
return result;
如此将str里的内容赋值给一个const char*即可。

热心网友 时间:2023-11-14 18:21

有个需求,需要jni中返回jstring,由于一直在c++中使用string拼接字符串,所以返回得把string转成jstring,网上搜了下,非常麻烦,再加上我返回jstring用的统一接口是
env->NewStringUTF(result)
env为jni指针,result为const char*
所以想到先把string转成const char*,然后直接调用这个接口返回string,代码如下:

string str = "";
result = str.c_str();
return env->NewStringUTF(result);
如此编译so运行之后确实起初没发现没问题,本来也以为此方案OK,但是在红米note2上发现返回乱码,分析得知str.c_str()返回的指针会由于str的被回收而导致指向垃圾内容。如此一来转换解决方案如下:

char* c;
const int len = str.length();
c =new char[len+1];
strcpy(c,str.c_str());
const char* result = c;
return result;
如此将str里的内容赋值给一个const char*即可。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 Wmns Blazer High 鞋带 jni jstring类型与c++字符串类型相互转换 谁帮我鉴定下,这双NIKE WMNS BLAZER MID系列的鞋子是不是正品啊!在线等。 JNI编程之如何传递参数(一)——String参数的传递 c++ 中怎么讲jstring 转换为 String(java中的类型)? 这双耐克Nike WMNS Blazer 518171-403,鞋舌有两款吗?一种是海绵的一种是缝合的吗?求真伪。 这款耐克WMNS BLAZER LOW CLASSIC 317581-411是真的吗 jni怎么将jstring转换为string 信管家开户,外盘期货开户,外盘期货哪个平台好 耐克开拓者怎么清洗鞋里面 耐克Blazer翻毛板鞋怎么清理 Nike Blazer Mid Patchwork经典 nike logo怎么洗? 耐克blazer怎么刷 耐克BLAZER MID PRM鞋该怎么洗 NIKE WMNS BLAZER MID SDE 怎么洗啊? 信管家外盘期货怎么开户,信管家原油手续费多少 期货怎么开户?来这里看看 信管家期货开户怎么弄 信管家怎么开户 脑子混乱,反应迟难,记忆不好,睡不着觉是什么病,有什么办法可治 java中 String 的定义的时候,采用如下方法为什么是对的? nike 绿色 白勾的这个鞋是啥? 帮咱看看 NIKE blazer的问题! 怎么把jstring转换成char 红米k40怎么扫描文件? 09年Nike情人节鞋 C++ 数字转字符串 double 转换成字符串 就是char类型的 或者是 jstring也行 Nike Wmns Blazer Mid & Terminator Low世博限定版价格 char[] 如何转换为string型?用c++编程,得到的数据串发出,打包为dll动态库给java调用 如何在JNI中使用String类型 求鞠婧祎原图 将const char类型转换成jstring类型中的 NewStringUTF("GB2312");是何含义 如何解决jni char转化为jstring乱码问题 请问在jni编程中,jin 类型怎么转成jString 类型 梦见自已的亲人被害,而在河里被发现尸体打捞出来。 jni方法重载的问题 鞠婧祎把水洒到了吴宣仪裙子上,她们二人的反应是怎样的? word如何在页眉左侧固定插入图片 管理决策需经哪些基本程序 管理者如何进行决策