简体   繁体   English

JNI 将 jstring 转换为 char *

[英]JNI converting jstring to char *

I have passed a URL string from Java to C code as jstring data type through the use of JNI.我已经通过使用 JNI 将 URL 字符串作为jstring数据类型从 Java 传递到 C 代码。 And my library method needs a char * as url.我的库方法需要一个char *作为 url。

How can I convert jstring in char * ?如何将jstring转换为char *

PS: Is there any advantage of using jcharArray in C? PS:在 C 中使用 jcharArray 有什么好处吗? (ie Passing char [] instead of string in native method) (即在本地方法中传递char []而不是 string)

Here's aa couple of useful link that I found when I started with JNI这是我开始使用 JNI 时发现的一些有用链接

http://en.wikipedia.org/wiki/Java_Native_Interface http://en.wikipedia.org/wiki/Java_Native_Interface
http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html

concerning your problem you can use this关于您的问题,您可以使用它

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)   
{
   const char *nativeString = env->GetStringUTFChars(javaString, 0);

   // use your string

   env->ReleaseStringUTFChars(javaString, nativeString);
}

Thanks Jason Rogers's answer first.首先感谢杰森罗杰斯的回答。

In Android && cpp should be this:Android && cpp 中应该是这样的:

const char *nativeString = env->GetStringUTFChars(javaString, nullptr);

// use your string

env->ReleaseStringUTFChars(javaString, nativeString);

Can fix this errors:可以修复这个错误:

1.error: base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}' 1. 错误:'->' 的基操作数具有非指针类型 'JNIEnv {aka _JNIEnv}'

2.error: no matching function for call to '_JNIEnv::GetStringUTFChars(JNIEnv*&, _jstring*&, bool)' 2.错误:没有匹配的函数调用'_JNIEnv::GetStringUTFChars(JNIEnv*&, _jstring*&, bool)'

3.error: no matching function for call to '_JNIEnv::ReleaseStringUTFChars(JNIEnv*&, _jstring*&, char const*&)' 3.错误:没有匹配的函数调用'_JNIEnv::ReleaseStringUTFChars(JNIEnv*&, _jstring*&, char const*&)'

4.add "env->DeleteLocalRef(nativeString);" 4.添加“env->DeleteLocalRef(nativeString);” at end.最后。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM