首页 > 解决方案 > 尝试在 Rust 中打印字符串内容时编译时的大小未知

问题描述

我有几段代码,一旦出错,另一段没有,我不明白为什么。

编译时出错的那个:

fn main() {
    let s1 = String::from("hello");

    println!("{}", *s1);
}

这会抛出:在编译时没有已知的大小,就行println!("{}", *s1);

一个有效的:

fn main() {
    let s1 = String::from("hello");

    print_string(&s1);

}

fn print_string(s1: &String) {
    println!("{}", *s1);
}

为什么会这样?访问字符串内容并打印它们的两种正确方法都不是吗?

标签: rust

解决方案


在第一个片段中,您要取消引用String. str这会产生一个动态大小的类型(在旧文本中有时称为未调整大小的类型)。DST 有点难以直接使用

在第二个片段中,您将取消引用 a &String,这会产生一个 regular String,它是一种正常大小的类型。

在这两种情况下,取消引用都是完全没用的,你为什么还要使用一个?


推荐阅读