想要从JNI函数生成随机字符串的修复长度,因为我使用了以下函数
static const char alphanum[] =
"abcdefghijklmnopqrstuvwxyz";
jstring Utils::getRandomString(JNIEnv *env, const int len) {
char s[len];
for (int i = 0; i < len; ++i) {
int p = rand() % (sizeof(alphanum) - 1);
s[i] = alphanum[p];
}
s[len] = 0;
__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "getRandomString %s", s);
jstring temp= env->NewStringUTF(s);
return temp;
}
但仅针对ABI版本jstring temp= env->NewStringUTF(s);
armeabi-v7a
而崩溃
我尝试过的解决方案this solution
jstring Utils::getRandomString(JNIEnv *env, const int len) {
char s[len];
for (int i = 0; i < len; ++i) {
int p = rand() % (sizeof(alphanum) - 1);
s[i] = alphanum[p];
}
s[len] = 0;
__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "getRandomString 2 %s", s);
jbyteArray array = env->NewByteArray(len);
env->SetByteArrayRegion(array, 0, len, (const jbyte *) s);
jstring strEncode = env->NewStringUTF("UTF-8");
jclass cls = env->FindClass("java/lang/String");
jmethodID ctor = env->GetMethodID(cls, "<init>", "([BLjava/lang/String;)V");
jstring object = (jstring) env->NewObject(cls, ctor, array, strEncode);
__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "getRandomString 3 %s",
env->GetStringUTFChars(object, 0));
// jstring temp= env->NewStringUTF(s);
return object;
}
但是当我们在ABI armeabi-v7a
上执行相同的代码时,它正好适用于ABI版本x86
它会返回意外输出,例如PKdhtXMmr18n2L9K -DL < / p>
请提供一些返回生成的字符串的解决方案。 env->NewStringUTF()
工作于ABI版本x86
,armeabi-v7a
会崩溃。
提前致谢