2

如您所见,我从 utf 字符串中得到 jbyte *str。那么字符串的每个字符都有两个jbytes,否则一个字节?

JNIEXPORT jstring JNICALL 

Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt) { 

    char buf[128];
    const jbyte *str;
    str = (env)->GetStringUTFChars(env, prompt, NULL);

    if (str == NULL) { 
        return NULL; / OutOfMemoryError already thrown */ 
    }

    printf("%s", str);

    (*env)->ReleaseStringUTFChars(env, prompt, str); 
    /* We assume here that the user does not type more than * 127 characters */ 
    scanf("%s", buf);

    return (*env)->NewStringUTF(env, buf);
}
4

1 回答 1

1

这里:

str = (env)->GetStringUTFChars(env, prompt, NULL);

您收到单字节字符的缓冲区。您甚至可以像这里这样编辑:

const char *str = (env)->GetStringUTFChars(env, prompt, NULL);

因为GetStringUTFChars()被声明为正在返回const char *

于 2011-09-24T20:57:44.850 回答