Я не могу точно определить эффективную разницу между ними, первый, кажется, работает более надежно.Второй работает с корректировкой, но имеет проблемы с неполными многобайтовыми строками, и когда я удаляю bytesWritten - 1 с измененным размером, он вообще не работает.Я хотел бы знать, почему они работают по-другому.Спасибо!
Первый:
size_t maxBytes = JSStringGetMaximumUTF8CStringSize(str);
std::vector<char> buffer(maxBytes);
JSStringGetUTF8CString(str, buffer.data(), maxBytes);
return std::string(buffer.data());
Второй:
std::string result;
size_t maxBytes = JSStringGetMaximumUTF8CStringSize(str);
result.resize(maxBytes);
size_t bytesWritten = JSStringGetUTF8CString(str, &result[0], maxBytes);
// JSStringGetUTF8CString writes the null terminator, so we want to resize
// to `bytesWritten - 1` so that `result` has the correct length.
result.resize(bytesWritten - 1);
return result;