< 返回版块

a newcomer 发表于 2020-03-25 23:15

Tags:PartialEq, Eq, String


fn main() {
    let s1 = "hello";

    let mut v = s1.as_bytes().to_vec();
    v.extend(&[0, 0, 0, 0, 0, 0]);

    let s2 = String::from_utf8_lossy(&v);

    println!("{}", s1 == s2);
}

上面的代码会打印出 false 而不是 true


如果分别打印 s1s2 显示出来的结果都是 hello 如果把最后一行的表达式改成 s1 == s2.trim() 依然输出 false


Ext Link: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20s1%20%3D%20%22hello%22%3B%0A%0A%20%20%20%20let%20mut%20v%20%3D%20s1.as_bytes().to_vec()%3B%0A%20%20%20%20v.extend(%26%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%5D)%3B%0A%0A%20%20%20%20let%20s2%20%3D%20String%3A%3Afrom_utf8_lossy(%26v)%3B%0A%0A%20%20%20%20println!(%22%7B%7D%22%2C%20s1%20%3D%3D%20s2)%3B%0A%7D%0A

评论区

写评论
yangweng 2020-03-27 13:31

注意这句: v.extend(&[0, 0, 0, 0, 0, 0]); 你在字符串后台加了几个空的位置。这样长度不一样了

Cupnfish 2020-03-26 10:05

你这个很明显的啊...你输出s1和s2就会发现s2后面多了一些奇怪的符号...所以s1和s2肯定不相等啊

作者 a newcomer 2020-03-25 23:19

刚刚可能是网卡了, 不小心发多了一个...

找不到删帖的按钮...

1 共 3 条评论, 1 页