C字符串中缺少第一个字符

安托约

我正在写一个到girara的绑定,并且状态栏项文本有问题:第一个字符丢失。

这是我绑定的一部分:

#[link(name="girara-gtk3")]
extern "C" {
    // Statusbar.
    pub fn girara_statusbar_item_add(session: *mut girara_session_t,
                                     expand: bool,
                                     fill: bool,
                                     left: bool,
                                     callback: girara_statusbar_event_t)
                                     -> *mut girara_statusbar_item_t;
    pub fn girara_statusbar_item_set_text(session: *mut girara_session_t,
                                          item: *mut girara_statusbar_item_t,
                                          text: *const c_char);
}

这就是我如何调用这些函数:

let item = unsafe { girara_statusbar_item_add(session, true, true, true, None) };
assert!(item != 0 as *mut _);

let text = CString::new("girara-left").unwrap().as_ptr();
unsafe { girara_statusbar_item_set_text(session, item, text) };

但是girara-left我没有看,只是看irara-left

使用CString一种发送*const c_char给FFI的好方法吗?

为什么第一个字符丢失了?

更新

这里有些奇怪的事情发生。

如果我将代码更改为:

let text = CString::new("girara-left").unwrap().as_ptr();
let text2 = CString::new("hello World").unwrap();
unsafe { girara_statusbar_item_set_text(session, item, text) };

text2未使用的地方),hello World则显示该文本,这是没有意义的。似乎指针没有指向正确的位置。

安托约

出现此问题的原因是,CString在将指针发送到ffi函数之前已将丢弃(请参见此处)。

解决方案是将绑定CString到变量:

let text = CString::new("girara-left").unwrap();
unsafe { girara_statusbar_item_set_text(session, item, text.as_ptr()) };

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

字符串小写的第一个字符-C#

来自分类Dev

从字符串中删除第一个字符

来自分类Dev

使用C#从字符串中删除第一个字符

来自分类Dev

从字符串中删除第一个字符

来自分类Dev

返回字符串中每个单词的第一个字符

来自分类Dev

Pinvoke字符串中仅传递第一个字符

来自分类Dev

在作为字母的字符串中查找第一个字符

来自分类Dev

从字符串中删除第一个字符

来自分类Dev

查找数组字符串中的第一个字符

来自分类Dev

C ++ fstream仅保存字符串的第一个字符

来自分类Dev

在Oracle Server中删除字符串的第一个字符

来自分类Dev

R从字符串中删除第一个字符

来自分类Dev

是否有最佳实践来获取C ++中字符串的第一个字符?

来自分类Dev

从字符串Django模板中删除第一个字符

来自分类Dev

在MySQL中替换字符串中的第一个字符

来自分类Dev

无法获得字符串数组中的第一个字符

来自分类Dev

如果每个字符串中的第一个字符相同,则从数组中的每个字符串中删除第一个字符

来自分类Dev

从字符串中获取第一个字符的最快方法

来自分类Dev

字符串小写的第一个字符-C#

来自分类Dev

C#如何交换字符串中的第一个字符与最后一个字符

来自分类Dev

从字符串Django模板中删除第一个字符

来自分类Dev

删除O(1)中字符串的第一个字符

来自分类Dev

string [0]从字符串中获取第一个字符

来自分类Dev

NaN值,字符串中的第一个字符

来自分类Dev

C++ fread 字符串在控制台输出中缺少第一个字符

来自分类Dev

C语言中如何从字符串中取出第一个字符?

来自分类Dev

检查字符串中的第一个字符

来自分类Dev

在 LotusScript 中删除字符串的第一个字符

来自分类Dev

连接字符串中单词的第一个字符

Related 相关文章

  1. 1

    字符串小写的第一个字符-C#

  2. 2

    从字符串中删除第一个字符

  3. 3

    使用C#从字符串中删除第一个字符

  4. 4

    从字符串中删除第一个字符

  5. 5

    返回字符串中每个单词的第一个字符

  6. 6

    Pinvoke字符串中仅传递第一个字符

  7. 7

    在作为字母的字符串中查找第一个字符

  8. 8

    从字符串中删除第一个字符

  9. 9

    查找数组字符串中的第一个字符

  10. 10

    C ++ fstream仅保存字符串的第一个字符

  11. 11

    在Oracle Server中删除字符串的第一个字符

  12. 12

    R从字符串中删除第一个字符

  13. 13

    是否有最佳实践来获取C ++中字符串的第一个字符?

  14. 14

    从字符串Django模板中删除第一个字符

  15. 15

    在MySQL中替换字符串中的第一个字符

  16. 16

    无法获得字符串数组中的第一个字符

  17. 17

    如果每个字符串中的第一个字符相同,则从数组中的每个字符串中删除第一个字符

  18. 18

    从字符串中获取第一个字符的最快方法

  19. 19

    字符串小写的第一个字符-C#

  20. 20

    C#如何交换字符串中的第一个字符与最后一个字符

  21. 21

    从字符串Django模板中删除第一个字符

  22. 22

    删除O(1)中字符串的第一个字符

  23. 23

    string [0]从字符串中获取第一个字符

  24. 24

    NaN值,字符串中的第一个字符

  25. 25

    C++ fread 字符串在控制台输出中缺少第一个字符

  26. 26

    C语言中如何从字符串中取出第一个字符?

  27. 27

    检查字符串中的第一个字符

  28. 28

    在 LotusScript 中删除字符串的第一个字符

  29. 29

    连接字符串中单词的第一个字符

热门标签

归档