Java JNI于C++通信字符串传输错误

今天用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';
}

这样的话就可以避免解析额外的地址,经测试完美解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值