【发布时间】:2018-02-01 18:35:28
【问题描述】:
我正在使用 JNI 代码生成随机字符串并使用以下代码将其返回给调用函数。
static const char alphanum[] =
"abcdefghijklmnopqrstuvwxyz";
jstring Utils::getRandomString(JNIEnv *env, const int len) {
char s[len + 1];
for (int i = 0; i < len; ++i) {
int p = rand() % (sizeof(alphanum) - 1);
s[i] = alphanum[p];
}
s[len] = 0;
return env->NewStringUTF(s);
}
我对如何在 JNI 中终止字符串感到困惑,我看到有两种方法
s[len] = 0;
与
s[len] = '\0'
谁能解释两者之间的区别?哪一个适合 JNI 代码?识别这个东西的原因是应用程序在添加 s[len] = '\0' 后在某些设备上崩溃,而它是 s[len] = 0; 它工作正常。
我无法生成此崩溃,但它已在结构控制台 http://crashes.to/s/2e4bca9a62c 上报告。
【问题讨论】:
-
两者应该相同。
\0添加更多类型信息。 -
@Jarod42 根据我更新后的分析 s[len] = 0; to s[len] = '\0' 报告崩溃
-
“根据我在更新 s[len] = 0; 到 s[len] = '\0' 后报告崩溃的分析” 这似乎极不可能。您应该寻找其他可能性。
-
既然这看起来是 C++,你为什么不用
std::string?就此而言,您可能需要使用a better PRNG。
标签: android c++ android-ndk java-native-interface