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
如果分别打印 s1
和 s2
显示出来的结果都是 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
1
共 3 条评论, 1 页
评论区
写评论注意这句: v.extend(&[0, 0, 0, 0, 0, 0]); 你在字符串后台加了几个空的位置。这样长度不一样了
你这个很明显的啊...你输出s1和s2就会发现s2后面多了一些奇怪的符号...所以s1和s2肯定不相等啊
刚刚可能是网卡了, 不小心发多了一个...
找不到删帖的按钮...