- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 rubygem,带有用 rust 编写的 native 扩展。
native 扩展支持将其数据结构序列化为 JSON。
但是,虽然我已确认它正在生成 JSON,但在 ruby 端,该字符串始终为空。
这是 ruby 代码:
module RustCuckooFilter
extend FFI::Library
ffi_lib 'libcuckoofilter_cabi'
class Instance < FFI::AutoPointer
def export(path)
RustCuckooFilter.export(self)
end
end
attach_function :export, :rcf_cuckoofilter_export, [Instance], :pointer
和 rust 代码
/// Exports the filter to a file
#[no_mangle]
pub extern "C" fn rcf_cuckoofilter_export(filter: *mut rcf_cuckoofilter) -> *const c_char {
let filter = unsafe { filter.as_mut() };
let serialized = serde_json::to_string(&filter.expect("Given rcf_cuckoofilter* is a null pointer").export()).unwrap();
let cstr = CString::new(serialized).expect("JSON was not a valid c string");
let ptr = cstr.as_ptr();
unsafe {
println!("{:#?}", ptr);
println!("{}", CStr::from_ptr(ptr).to_str().expect("validity"));
}
ptr
}
在 Rust 方面,println!
使用确认指针包含 JSON 字符串。
通过比较它打印的地址和 ruby 中 #export
的返回值,我可以看到使用了相同的指针。
但是,对指针调用 get_bytes(0, 10)
会发现它以空字节开头,并尝试将其转换为字符串会返回空字符串。
我怀疑它被清零了,因为变量的生命周期结束了,我正在 Debug模式下构建;但是,我不清楚我需要更改什么。
最佳答案
想通了 - 我需要在使用rust 的一面使用 CString::into_raw
以防止它被清理。
关于ruby - 通过 FFI 从 rust 到 ruby ,弦变空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55173958/
例如,如果我有 >>> name = f"{os.path.splitext(os.path.basename('/some/long/path/I/donot/need/to/some/config
我正在学习教程并试图了解此处发生的情况。所以我们首先将“消息”编码为字节,然后取其长度并将其向左对齐(?)10,然后对整个内容进行编码? 我试图在我的设备中使用这个部分,它不理解 f-strings,
我敢肯定这个问题被问了很多,但我只是想确保没有更好的方法来做到这一点。 基本上,我有一个 const char* 指向一个以 null 结尾的 C 字符串。我有另一个函数,它需要一个指向具有相同字符的
我使用的是最新的稳定版 PyCharm 2016.1.4 和 Python 3.6a1。每当我使用“f-strings”(PEP-498)时,PyCharm 都会提示 f 是一个 Unresolved
我发现了一些显然是为 python 3.6 设计的代码。 出于某种原因,我需要在 python 3.5 环境中运行该代码。据推测,这两个版本应该是向后兼容的。然而,原始代码在 f-strings 中滥
我是一名优秀的程序员,十分优秀!