将空字符串从 C++ 通过 JNI 返回到 Java
Returning empty string from C++ through JNI to Java
我正在制作一个X平台库,并试图将其导出到Java中。
有一个函数返回我一个字符串:
C++代码
string results = "";
for (vector<int>::size_type i = 0; i < resultsDouble.size(); i++) {
for (it_type3 it = distances.begin(); it != distances.end(); ++it) {
String key = it->first;
double value = distances.at(key);
if (value == resultsDouble.at(i)) {
typesString.push_back(key);
results = results + " " + key;
}
}
}
char const* resultsChar = results.c_str();
return resultsChar;
在Java上打印时,即使在JNI调用上也是空的。
如果我做to_string(results).c_str();
,它也是空
但我知道字符串不是空的,因为当我打印to_string(results.length()).c_str();
时,它会显示 435 .
为什么它显示一个空字符串?
谢谢。
编辑
如果我将结果更改为字符串,我会得到:
致命信号 11 (SIGSEGV( 在 0x00000004 (代码 = 1(, 线程 17339 (w.opencvtesting(
编辑 2我正在尝试这样做:
string getMyString(string JSON, long proof) {
string result = "";
return result;
}
日志打印我的是:
Ж(¤
您的C++代码似乎不正确,因为您返回了一个指向本地string results
数据的指针,该指针在函数退出时被销毁。您应该将其更改为:
string getMyString(...) {
string results = "";
...
return results;
}
然后转换是像你一样jstring
:
jstring Java_com_MyFunc(JNIEnv* env, ...) {
string result = getMyString(...);
return env->NewStringUTF(result.c_str());
}
您返回的char const*
指向局部变量,当您离开函数时将被销毁。你应该返回一个std::string
,JNI包装器直接转换为jstring
。
相关文章:
- React Native (Android):无法通过 JNI 在 jobject 中返回字符串
- 使用 jni 将返回带有模板的对象的 Java 代码转换为 c++
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- JNI返回Java对象,可以返回本地参考,还是必须是全局
- JNI:返回用户定义的Java类时要使用什么签名
- libusb_open 在 JNI Android 中返回LIBUSB_ERROR_ACCESS
- 如何从 JNI 返回向量<向量<float>>?
- 返回 JNI 中的多维数组
- JNI C FindClass函数返回null
- JNI 返回日期
- 在 Linux 上,JNI AttachNativeThread 总是失败,返回值为 -1
- JNI 代码返回字符串,但得到错误 java.lang.UnsatisfiedLinkError: com.packag
- 如何使用JNI返回C char 2D数组
- 使用 JNI 通过从C++到 Java 的指针返回数据
- 返回数组点列表的 JNI 方法中的错误
- NDK带有JNI的ndk,使用返回类型的非原始类型调用方法
- 在JNI中返回双重指针
- JNI:从C++调用JAVA方法,返回对象,引用和GC
- 从 JNI 返回 MPI::Request[] 类型,并在 Java 中访问 Request 的元素
- 通过JNI返回指向Java的类指针