Java JNI将jstring转换为char*

Java JNI将jstring转换为char*,java,java-native-interface,Java,Java Native Interface,通过使用JNI,我将一个URL字符串作为jstring数据类型从Java传递到C代码。我的库方法需要一个char*作为url 如何在char*中转换jstring 附言:在C中使用jcharArray有什么好处吗?(即,在本机方法中传递char[]而不是字符串)以下是我在开始使用JNI时发现的几个有用的链接 关于你的问题,你可以用这个 JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstr

通过使用JNI,我将一个URL字符串作为
jstring
数据类型从Java传递到C代码。我的库方法需要一个
char*
作为url

如何在
char*
中转换
jstring


附言:在C中使用jcharArray有什么好处吗?(即,在本机方法中传递
char[]
而不是字符串)

以下是我在开始使用JNI时发现的几个有用的链接


关于你的问题,你可以用这个

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);
}

首先感谢杰森·罗杰斯的回答

Android中cpp中应该是:

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

// use your string

env->ReleaseStringUTFChars(javaString, nativeString);
可以修复此错误:

1.错误:'->'的基操作数具有非指针类型“JNIEnv{aka_JNIEnv}”

2.错误:调用“\u JNIEnv::GetStringUTFChars(JNIEnv*&,\u jstring*&,bool)”时没有匹配的函数

3.错误:调用“\u JNIEnv::ReleaseStringUTFChars(JNIEnv*&,\u jstring*&,char const*&)”时没有匹配的函数


4.在末尾添加“env->DeleteLocalRef(nativeString);”。

是否需要保持
nativeString
恒定?如果检查第二个链接,函数GetStringUTFChars的原型是:const jbyte*GetStringUTFChars(JNIEnv*env,jstring string,jboolean*isCopy);因此,你没有真正的选择。我认为值得注意的是,这里(以及维基百科页面上)概述的技术使用了改进的UTF-8编码,这可能不适用于所有情况。请看,谢谢,这项工作,但有趣的是,const char*无法转换为char*:)。@从技术上讲,它可以使用一些魔法,但这是最好避免的;它被声明为
const
可能是有原因的。对问题的正确响应是将
strcpy
const char*
转换为
char*
。这应该为您提供您想要的可变代码> char */COD>。您需要(*Env)->而不是EnV-> >您只需要使用代码>(*Env)-> /Cord>如果您使用C,而不是C++。如何将字符串转换为Sa256?我不能这样做,PLS帮助NDK ANDROND中的新成员您是否考虑过查阅文档?