今天用JSON数据在JAVA与C++之间通信,发现把字符串传给C++之后字符串出现了奇怪的字符
JNIEXPORT jlong JNICALL A_B(JNIEnv *env, jobject _jclass, jbyteArray _params){
char *params = (char *) (env->GetByteArrayElements(_params, JNI_FALSE));
}
在C++中接收的字符串params出现差错。
JAVA中传递的字符串是{“a":"b"}的json数据。C++接收的params是{"a":"b"}(
多了一个左括号导致JSON解析异常错误,而且后面出现的字符又随机性,随机是否出现,随机出现各种字符。可能是params指针指向的空间长度大于了传递过来的字符串的空间长度。导致解析了额外空间的地址,解析出来的字符串是不受控制的状态。
将代码改成如下:
JNIEXPORT jlong JNICALL A_B
(JNIEnv *env, jobject _jclass, jbyteArray _params) {
//parse params
char *params = (char *) (env->GetByteArrayElements(_params, JNI_FALSE));
int length = env->GetArrayLength(_params);
params[length] = '\0';
}
这样的话就可以避免解析额外的地址,经测试完美解决问题。