Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
574 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 Answer

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.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...