c_char { s } Вот такое работает и не сообщает что не FFI-safe. Но это не работает
let c = CString::new(s).expect("CString::new failed");. Как можно подругому ?
ммм... оно же даже не скомпилится?
Кстати, ещё замечу что у тебя используется expect, который паникует. Паника в коде, вызванном извне через FFI - это UB. Надо обработать вариант Err и возвращать из фукнции, к примеру, null_ptr). (вообще, панику можно бросить если воспользоваться замыканием в фукцнии use std::panic::catch_unwind , но оно обычно не нужно)
Согласен, но с паникой то разберусь. Вот это работаетlet c = CString::new(*s); Хотя это наверное, я новый указатель создаю, а не строку ? а это не работает let len = c.to_bytes().len();
Обсуждают сегодня