Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
579 views
in Technique[技术] by (71.8m points)

borrow checker - Rust String from temporary u8 slice

I want to run a command and capture its output.

let result = match Command::new(thing.command).output() {
            Ok(out) => String::from_utf8_lossy(&out.stdout),
            Err(_) => ....,
        };

I get the error for &out.stdout that borrowed value does not live long enough. I understand the issue, but how can I create a copy of the u8 slice and transfer complete ownership into a newly created string?

question from:https://stackoverflow.com/questions/65858051/rust-string-from-temporary-u8-slice

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

from_utf8_lossy's return value is a Cow:

pub fn from_utf8_lossy(v: &[u8]) -> Cow<'_, str>

If you want to create a copy and transfer the ownership, into_owned() of Cow is specifically designed for that:

pub fn into_owned(self) -> <B as ToOwned>::Owned
Extracts the owned data.

Clones the data if it is not already owned.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...