0
私は質問がそれをすべて言うと思います。私はAndroid NDKで作業します。私はstdを含めることはできません、ベクトルの使用をしないでください、単純かつ単純なC + +。私はcppFilePaths
がfilePaths
で最後の文字列のelementCount
エントリを含むで終わるでしょう。このコードでJNI jobjectarray(Java String [])を使用してC++ char []を埋める方法は?
// filePaths = jobjectarray = Java String[] int elementCount = env->GetArrayLength(filePaths); // this should end up being the char[] with the filePaths in it char *cppFilePaths[elementCount]; for (int i = 0; i < elementCount; i++) { jstring jFilePath = (jstring) (env->GetObjectArrayElement(filePaths, i)); const char *cppFilePath = env->GetStringUTFChars(jFilePath, 0); // this does not work! cppFilePaths[i] = cppFilePath; env->ReleaseStringUTFChars(jFilePath, cppFilePath); env->DeleteLocalRef(jFilePath); }
: は、ここで私がこれまで持っているものです。
私は多くを検索し、約strcpy
またはmemcpy
を見つけましたが、これまでのところ何も働いていませんでした。
は.... ...あなたがリリースを必要とする取得していない、コピー文字列の値を保持したい場合は空きです。また、コピー元のエンコーディングはUTF-8で修正されています。これはネイティブコードで必要とされるものであれば問題ありません。 –
私はループを書き直すように頼むことができるので、 "コピー"部分は機能しますか?私の質問でコードを使用すると、 'jFilePath'はループ全体で同じポインタアドレスを保持していました。これが、最後の文字列が 'cppFilePaths'のすべての要素にあることに終わった理由です – muetzenflo