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;
}
当我使用带有四个字符的 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 提案。
欢迎提出任何改进文档的建议。
尝试使用 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;
}
当我使用带有四个字符的 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 提案。
欢迎提出任何改进文档的建议。