Androidスタジオ2.3.2 グレード実験0.9.2 最終NDK。 JavaでJNIを介して呼び出される小さな関数をCに書きましたが、そこには存在しない文字の前に文字列を返します。アンドロイドndk c関数リバース奇妙な値
static {
System.loadLibrary("myapp");
}
public native String getMsg(String var);
String stringreturnedfromC = getMsg("eee");//eee is not used
このショーこの:
これは、Javaコールで
char * text() {
char * txt = "a";
char * ret = malloc(strlen(a)+2);
strcat(ret,txt);
strcat(ret,"b");
return ret;
}
これは、Java
JNIEXPORT jstring JNICALL
Java_com_myapp_Main_getMsg(JNIEnv *env, jobject instance, jstring var)
{
char * msg = text();
return (*env)->NewStringUTF(env, msg);
}
に戻るには、JNI Cは次のとおりです。 これはCの関数であります_Main_getMsg ab
"ab"だけを返す必要があります。
これは異常な動作です。どうして?そして、どうすれば正しい文字列を手に入れることができますか?
'のstrlen関数のようなものですか?そしてlenは何ですか? – greenapps
最初のstrcat()をstrcpy()に置き換えます。 – greenapps
#greenapps strlenは文字列の長さを返し、メモリを割り当てるために使用する必要があります。 strcat()を置き換えようとしています。 – Daniele