jni将jstring转换为char

时间:2016-01-13 04:10:12

标签: android android-ndk java-native-interface

我必须将jstring转换为const char。我尝试了以下内容。

jint
Java_flacTest_AudioFormatConversion_convertWavToFlac( JNIEnv* env, jobject thiz, jstring *wavefile, jstring *flacfile, jstring *tempfile) {

    const char *wave_file = (*env)->GetStringUTFChars(env, wavefile, 0);
    // use your string
    (*env)->ReleaseStringUTFChars(env, wavefile, wave_file);

    const char *flac_file = (*env)->GetStringUTFChars(env, flacfile, 0);
    // use your string
    (*env)->ReleaseStringUTFChars(env, flacfile, flac_file);

    const char *temp_file = (*env)->GetStringUTFChars(env, tempfile, 0);
    // use your string
    (*env)->ReleaseStringUTFChars(env, tempfile, temp_file);


__android_log_print(ANDROID_LOG_DEBUG,"LOG_TAG","input file path %s\n", wave_file);
__android_log_print(ANDROID_LOG_DEBUG,"LOG_TAG","input file path 2%s\n", flac_file);
__android_log_print(ANDROID_LOG_DEBUG,"LOG_TAG","input file path3 %s\n", temp_file);

当我打印值时,所有值都只有temp_file值。我需要将所有3个字符串转换为const char。我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

调用GetStringUTFChars()后,ReleaseStringUTFChars()返回的指针无效。听起来实现恰好是重新使用所有三个存储 - 我猜测指针值都是一样的。

使用这些值,或者在释放它们之前用strdup()复制字符串。