El libro "JNI esencial: Java Native Interface" por Rob Gordon contiene el siguiente ejemplo de código para convertir un jstring a una cadena C:¿Debería llamar a ReleaseStringUTFChars si GetStringUTFChars devolvió una copia?
const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
env->ReleaseStringUTFChars(str, utf_string);
}
Tenga en cuenta que sólo se llama ReleaseStringUTFChars
si isCopy
es cierto.
Pero el libro (enlace alternativo: http://192.9.162.55/docs/books/jni/html/objtypes.html#5161
) Java Native Interface: Programmer's Guide and Specification dice:
La llamada ReleaseString-char es necesaria si GetStringChars tiene conjunto * isCopy a JNI_TRUE o JNI_FALSE. ReleaseStringChars libera la copia o anula la instancia, según según si GetStringChars ha ha devuelto una copia o no.
Estoy en lo correcto al asumir que esto es un error en el libro de Gordon?
¿dónde se define 'str'? – SomethingSomething