String :: from_utf8_lossy()是否分配内存?

时间:2020-02-05 07:13:39

标签: rust

我想将数组的前10个字节转换为字符串。

如果我执行String::from_utf8_lossy(),它将返回&str

我是否正确理解&str是这10个字节的地址,而实际上只会分配内存来创建链接?

1 个答案:

答案 0 :(得分:6)

the docs报价为String::from_utf8_lossy

此函数返回一个Cow<'a, str>。如果字节片无效的UTF-8,则需要插入替换字符,这将改变字符串的大小,因此需要String。但是,如果它已经是有效的UTF-8,则不需要新的分配。这种返回类型使我们能够处理两种情况。

因此它不会返回&str,而是返回Cow<str>,并且仅在必要时分配,以将无效字节替换为“。”。

但是,通常,如果一个函数实际返回&str,则不会(新)分配该&str。它要么是静态的(嵌入在二进制文件本身中),要么具有从该函数的某些参数派生的生存期(例如String::trim)。