Jack音频客户端名称超过4个字符会破坏客户端

poi*_*idl 4 ffi jack rust

尝试使用Rust(文档)中的JACK-AUDIO-CONNECTION-KIT ,我遇到了调用问题

jack_client_t* jack_client_open (   const char *    client_name,
                                    jack_options_t  options,
                                    jack_status_t *     status,
                                    ... )   
Run Code Online (Sandbox Code Playgroud)

在Rust我用

#[link(name = "jack")]
extern "C" {
    pub fn jack_client_open(name: *const libc::c_char,
                        options: JackOptions,
                        status: &JackStatus)
                        -> *mut JackClientT;
}
Run Code Online (Sandbox Code Playgroud)

(完整代码)

当我使用name带有四个字符时,它可以工作,例如

let name = CString::new("yass").unwrap().as_ptr();
Run Code Online (Sandbox Code Playgroud)

但如果我使用5个或更多字符,它就不起作用.在上面链接的JACK文档中,它表示名称最多可以是int jack_client_name_size()字符长,在我的情况下是64.为什么会这样?

Eli*_*man 6

let name = CString::new("yass").unwrap().as_ptr();分配一个字符串,获取一个指向它的指针...然后抛弃该字符串,这样你就可以获得一个免费使用.不要这样做.写let name = CString::new("yass").unwrap();,然后使用name.as_ptr().另见CStr::as_ptr RFC建议.

任何改进文档的建议都会受到欢迎.