strcpy
не требуется, поскольку вы уже знаете длину того, что хотите скопировать, поэтому используйте memcpy
:
char8_t* to_c_str(std::u8string const& str) {
auto dest = new char8_t[str.size() + 1];
return static_cast<char8_t*>(std::memcpy(dest, str.data(), str.size()+1));
}
или std::copy
:
char8_t* to_c_str(std::u8string const& str) {
auto dest = new char8_t[str.size() + 1];
std::copy(str.data(), str.data() + str.size() + 1, dest);
return dest;
}
Поскольку собственный copy()
метод u8string
не может использоваться для непосредственного включения нулевого терминатора, я не буду использовать его при копировании в необработанный char8_t*
.