Rust 超过4个字符的Jack音频客户端名称会中断客户端
尝试使用Rust()中的JACK-AUDIO-CONNECTION-KIT时,调用时遇到问题Rust 超过4个字符的Jack音频客户端名称会中断客户端,rust,ffi,jack,Rust,Ffi,Jack,尝试使用Rust()中的JACK-AUDIO-CONNECTION-KIT时,调用时遇到问题 jack_client_t*jack_client_open(const char*client_name, jack_options_t options, 杰克的状态, ... ) 我用的是铁锈 #[link(name = "jack")] extern "C" { pub fn jack_client_open(name: *const libc::c_char,
jack_client_t*jack_client_open(const char*client_name,
jack_options_t options,
杰克的状态,
... )
我用的是铁锈
#[link(name = "jack")]
extern "C" {
pub fn jack_client_open(name: *const libc::c_char,
options: JackOptions,
status: &JackStatus)
-> *mut JackClientT;
}
()
当我使用带有四个字符的名称时,它会起作用,例如
let name = CString::new("yass").unwrap().as_ptr();
但是如果我使用5个或更多的字符,它就不起作用了。在上面链接的JACK文档中,它表示名称最多可以是int JACK\u client\u name\u size()
个字符,在我的例子中是64个字符。为什么会发生这种情况?让name=CString::new(“yass”).unwrap().as_ptr()代码>分配字符串,获取指向该字符串的指针。。。然后扔掉绳子,这样你就可以免费使用了。不要这样做。Writelet name=CString::new(“yass”).unwrap()
,然后使用name.as\u ptr()
。另见和RFC建议书
欢迎提出任何改进文档的建议。现在就有意义了,谢谢!文档中的警告是好的。从RFC的建议来看,似乎很多初学者(像我一样)都在努力解决这个问题。“鼓励”用户对原始指针使用命名约定是否有意义,即如果原始指针未以“*\u ptr”结尾,则发出警告。从长远来看,这可能会提高人们对正确内存管理的警觉性,并在出现错误时提示人们不要依赖编译器出错。更多的高级人员可以禁用该警告。