Я пытаюсь передать строку в собственную функцию c
, но строка выводится как 09▀30≈ß#@÷g
для строки Type a String :
.Я не знаю, в чем проблема.
Это код, который я использовал для этого:
КОД JAVA
class Prompt {
private native String myGetLine( String prompt ); // native method that prints a prompt and reads a line
public static void main( String args[] ) {
Prompt prompt = new Prompt();
String input = prompt.myGetLine( "Type a String : ");
System.out.println("User Typed : " + input);
}
static {
System.loadLibrary("StringPassing"); // StringPassing.dll
}
}
C CODE
#include <jni.h>
#include <stdio.h>
#include "D:\UnderTest\JNI\StringPassing\Debug\Prompt.h"
JNIEXPORT jstring JNICALL Java_Prompt_myGetLine(JNIEnv *env, jobject obj, jstring str) {
char buf[128];
const jbyte *str_JVM;
str_JVM = (*env) -> GetStringUTFChars( env , str , NULL);
if( str_JVM == NULL ) return NULL;
printf("%s ",str);
(*env)->ReleaseStringUTFChars( env , str , str_JVM);
scanf("%s",buf);
return (*env)->NewStringUTF( env , buf);
}
Экран после завершения программы выглядит следующим образом:
D:\UnderTest\JNI\StringPassing\Debug>java Prompt
09▀30≈ß#@÷gV
User Typed : V
Почему я не получаю строку Type a String :
на cmd, когдая запускаю программу?
Также: мой компилятор подчеркивает (*env)
и указывает, что Выражение должно иметь тип указателя .Но когда я компилирую, я не получаю никаких ошибок.Почему это так и что это?