JNI Android - Conversion de char * en tableau d'octets et retour en java

J'ai d'abord utilisé une fonction pour renvoyer un char* à java en tant que chaîne UTF-8, mais depuis que j'ai continué de faire des erreurs, j'ai écrit la fonction suivante pour retourner un char* comme Java byte[]de sorte que je pourrais essayer de convertir le tableau en une Chaîne de caractères en java côté:

jbyteArray Java_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes(JNIEnv* env, jobject thiz, jint index) {
    if(pDevs[index].device_name == NULL) return NULL;
    int n=0;
    while(pDevs[index].device_name){
        n++;
    } if (n==0) return NULL;
    jbyteArray arr = (*env)->NewByteArray(env, n);
    (*env)->SetByteArrayRegion(env,arr,0,n, (jbyte*)pDevs[index].device_name);
    return arr;
}

Mais quand je l'appelle mon application se bloque. Ai-je raté quelque chose?

Mise à jour: La condition manquait un ++ et cela a provoqué une boucle infinie. Mais maintenant, avec le code suivant:

jbyteArray Java_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes(JNIEnv* env, jobject thiz, jint index) {
    int n=0;
    if(pDevs[index].device_name == NULL) return NULL;
    while(pDevs[index].device_name++){
        n++;
    } if(n==0) return NULL;
        jbyteArray arr = (*env)->NewByteArray(env, n);
        (*env)->SetByteArrayRegion(env,arr,0,n, (jbyte*)pDevs[index].device_name);
        return arr;
}

- Je obtenir cette étrange JNI avertissement:

06-15 22:40:02.303: W/dalvikvm(7616): JNI AVERTISSEMENT: négatif jsize (NewByteArray)

Comment peut-il être depuis que je suis seulement une augmentation de la valeur de n?

Mise à jour 2: le code suivant fonctionne:

jbyteArray Java_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes(
        JNIEnv* env, jobject thiz, jint index) {

    if(pDevs[index].device_name == NULL) return NULL;
    int n=0;
    char* p = pDevs[index].device_name;
    while(*p++){
        n++;
    } if(n<=0) return NULL;
    jbyteArray arr = (*env)->NewByteArray(env, n);
    (*env)->SetByteArrayRegion(env,arr,0,n, (jbyte*)pDevs[index].device_name);

    return arr;
}

source d'informationauteur Vektor88 | 2013-06-15