问题现象
解决措施
函数 OH_JSVM_GetValueStringUtf8 的第三个参数用于指定字符串写入的内存地址。如果传入空指针,接口会通过最后一个参数 result 返回字符串的长度(不包含终止符)。
JSVM_EXTERN JSVM_Status OH_JSVM_GetValueStringUtf8(JSVM_Env env,
JSVM_Value value,
char* buf,
size_t bufsize,
size_t* result); 获取字符串可分为以下三步:
std::string GetValueString(JSVM_Env env, JSVM_Value value) {
constexpr size_t PREALLOC_SIZE = 256;
char preallocMemory[PREALLOC_SIZE];
char *buff = preallocMemory;
// Obtain length
size_t totalLen = 0;
OH_JSVM_GetValueStringUtf8(env, value, nullptr, 0, &totalLen);
size_t needed = totalLen + 1;
if (needed > PREALLOC_SIZE) {
// Allocate space, size must include termination character
buff = new char[needed];
}
// get string
OH_JSVM_GetValueStringUtf8(env, value, buff, needed, nullptr);
std::string ret(buff, totalLen);
if (needed > PREALLOC_SIZE) {
delete[] buff;
}
return ret;
}