Rob Gordon 所著的《Essential JNI:Java Native Interface》一书包含以下将 jstring 转换为 C 字符串的代码示例:
const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
env->ReleaseStringUTFChars(str, utf_string);
}
请注意,它仅调用ReleaseStringUTFChars
if isCopy
是真的。
但这本书Java 本机接口:程序员指南和规范(备用链接:http://192.9.162.55/docs/books/jni/html/objtypes.html#5161
) says:
ReleaseString-Chars 调用是
GetStringChars 是否有必要
将 *isCopy 设置为 JNI_TRUE 或 JNI_FALSE。
ReleaseStringChars 要么释放
复制或取消固定实例,具体取决于
根据 GetStringChars 是否有
是否返回副本。
我认为这是戈登书中的错误是正确的吗?
是的,您的假设是正确的(您应该始终调用 ReleaseStringUTFChars)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)