Посмотрите на эту функцию:
fn exec(cli: Vec<&str>) {
eprintln!("execing: {:?}", cli);
let args: Vec<&CStr> = cli.iter()
.map(|s| CString::new(s.as_bytes()).unwrap().as_c_str())
.collect();
execv(args[0], &args);
debug(args);
}
Она принимает Vec<&str>
и выполняет ее как команду. У меня проблемы с преобразованием этого в Vec<&CStr>
(что нужно execv
). Компилятор сообщает об этой ошибке для операций map
:
error[E0515]: cannot return value referencing temporary value
--> src/idea.rs:141:18
|
141 | .map(|s| CString::new(s.as_bytes()).unwrap().as_c_str())
| -----------------------------------^^^^^^^^^^^
| |
| returns a value referencing data owned by the current function
| temporary value created here
Как я могу исправить эту ошибку?