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运行时会产生内存浪费,过短又会导致接收不到完整的字符串,请问有好的方案解决这个问题吗?
可以使用napi\_get\_value\_string\_utf8的第五个参数来获取ArkTS层传入字符串的长度。这个参数是一个指向size\_t类型的变量,它会在函数调用成功后被赋值为字符串的长度,可以根据这个长度来分配合适大小的char数组。
具体操作为:先调用napi\_get\_value\_string\_utf8函数来获取字符串的长度,然后根据长度分配char数组的内存空间。最后,再次调用napi\_get\_value\_string\_utf8函数来获取字符串的内容。注意,在分配内存时,可以将长度+1,以便为字符串添加终止符\0。