HarmonyOS NDK开发,如何读取不定长的字符串?

NAPI_EXTERN napi_status napi_get_value_string_utf8(napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result); 

在NDK开发中,使用这个api读取上层传入的字符串,但是需要传一个bufsize。遇到的问题是,上层传入的字符串长度是不定的(长度可能是100,也可能是2000),而在C层,需要先创建一个定长数组,而数组的长度如果选择的过长,那么在app运行时会产生内存浪费,过短又会导致接收不到完整的字符串,请问有好的方案解决这个问题吗?

阅读 578
1 个回答

可以使用napi\_get\_value\_string\_utf8的第五个参数来获取ArkTS层传入字符串的长度。这个参数是一个指向size\_t类型的变量,它会在函数调用成功后被赋值为字符串的长度,可以根据这个长度来分配合适大小的char数组。

具体操作为:先调用napi\_get\_value\_string\_utf8函数来获取字符串的长度,然后根据长度分配char数组的内存空间。最后,再次调用napi\_get\_value\_string\_utf8函数来获取字符串的内容。注意,在分配内存时,可以将长度+1,以便为字符串添加终止符\0。

static napi_value TestFunc(napi_env env, napi_callback_info info)
{
  size_t argc = 1;
  napi_value args[1] = {nullptr};
  napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
  size_t len = 0;
  napi_get_value_string_utf8(env, args[0], nullptr, 0, &len); // 获取字符串长度到len
  char* buf = new char[len+1]; // 分配合适大小的char数组
  napi_get_value_string_utf8(env, args[0], buf, len + 1, &len); // 获取字符串
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进