gpt4 book ai didi

java - 在 native 方法中更改字符串

转载 作者:行者123 更新时间:2023-12-01 12:39:58 24 4
gpt4 key购买 nike

我使用 native 方法来解析字符串。但是当返回结果时我收到错误

JNI 警告:输入无效修改后的 UTF-8:非法起始字节 0xff

这是我的代码:

jstring Java_com_example_helloworld_NativeLib_helloWorld(JNIEnv* env,
jobject thiz, jstring src) {
const char* mystring = (*env)->GetStringUTFChars(env, src, (jboolean*) 0);
printf("mystring: %s ", mystring);
int length = sizeof(mystring) / sizeof(mystring[0]);
char *result = (char*) malloc(length);
int i = 0;
for (i = 0; i < length; i++) {
result[i] = mystring[i] + 1;
}
(*env)->ReleaseStringUTFChars(env, src, mystring);
return (*env)->NewStringUTF(env, result);
}

最佳答案

详细阐述 Joop Eggen 的评论:

您应该使用strlen来查找字符串的长度;当前您正在计算指针的大小。

int length = strlen(mystring);

您遇到的另一个问题是 result 中的最后一个字符应该为 0 以指示字符串结尾:

char *result = (char*) malloc(length+1);
result[length] = 0;

一个更困难的问题是处理 UTF-8。向所有字符添加 1 将为某些输入创建无效的字符序列。如果您只需要支持 ASCII,一个快速解决方法是仅对 ASCII 字符执行操作,其余部分保持原样:

for (i = 0; i < length; i++) {
if (0 <= mystring[i] && mystring[i] < 0x7d)
result[i] = mystring[i] + 1;
else result[i] = mystring[i];
}

关于java - 在 native 方法中更改字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25201939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com