Jack 音频客户端名称超过 4 个字符会中断客户端

Jack audio client name longer than 4 characters breaks client

尝试使用 Rust 的 JACK-AUDIO-CONNECTION-KIT (documentation),我 运行 遇到调用

的问题
jack_client_t* jack_client_open (   const char *    client_name,
                                    jack_options_t  options,
                                    jack_status_t *     status,
                                    ... )   

在 Rust 中我使用

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

(complete code)

当我使用带有四个字符的 name 时它起作用了,例如

let name = CString::new("yass").unwrap().as_ptr();

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

let name = CString::new("yass").unwrap().as_ptr(); 分配一个字符串,获取一个指向它的指针...然后丢弃该字符串,这样您就可以实现释放后使用。不要这样做。写 let name = CString::new("yass").unwrap();,然后使用 name.as_ptr()。另请参阅 CStr::as_ptr and this RFC 提案。

欢迎提出任何改进文档的建议。