我想传入String一个Rust lib,但它总是抛出一个分段错误.
这是代码:
// lib.rs
#[no_mangle]
pub extern fn process(foo: String) -> String {
foo
}
Run Code Online (Sandbox Code Playgroud)
和Ruby文件:
# embed.rb
require 'ffi'
module Hello
extend FFI::Library
ffi_lib 'target/release/libembed.dylib'
attach_function :process, [ :string ], :string
end
puts Hello.process("foo")
Run Code Online (Sandbox Code Playgroud)
免责声明:我之前从未使用过Ruby-FFI; 我正在继续我在文档中找到的内容.
根据类型的Ruby-FFI wiki页面,:string相当于NUL终止的C字符串. 这是不一样的防锈String.StringRust中的A (现在)大三倍!
Rust中相应的类型*const ::libc::c_char.值得注意的是,也有std::ffi::CString,这是专为创建C字符串,而std::ffi::CStr这是可以从创建的安全包装类型或者一个CString或一个*const c_char.请注意,这些都不兼容*const c_char!
总之,要处理Rust中的C字符串,您将不得不处理类型.还要记住,根据您实际尝试的操作,您可能还需要处理使用libc::malloc和手动管理内存libc::free.
这个"Rust FFI C字符串处理"的答案提供了有关如何处理Rust中C字符串的更多细节.虽然问题的上下文是与C代码集成,但在您的情况下它应该同样有用.
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |