首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby/FFI:字符串未到达*char函数参数

Ruby/FFI:字符串未到达*char函数参数
EN

Stack Overflow用户
提问于 2018-06-19 04:50:26
回答 1查看 328关注 0票数 0

我正在尝试使用FFI实现来自Darknet library的几个函数

require 'ffi'

class Image < FFI::Struct
  layout :w, :int
  layout :h, :int
  layout :c, :int
  layout :data, :pointer
end

class Darknet
  extend FFI::Library

  ffi_lib "./libdarknet.so"

  attach_function :load_image_color, [:string, :int, :int], Image

end

image = Darknet.load_image_color("./test.jpg", 0, 0)

文件名字符串似乎没有通过:

Cannot load image "(null)"
STB Reason: can't fopen

这里是the functionthe declaration

我是FFI的新手,但我已经成功地实现了其他功能,没有任何问题。我肯定遗漏了一些明显的东西,如果有人能给我指点(没有双关语)…

EN

回答 1

Stack Overflow用户

发布于 2018-06-19 07:33:38

Ruby字符串与c字符串(或char [])不同,C字符串是以null结尾(最后一个字符是ASCII0- '\0')的连续字符数组,通常被认为是c中的“char *”。

因此,您需要通过宏StringValueCStr(str) (其中str是字符串变量"./test.jpg")将拼音字符串转换为指针。还有一种选择是StringValuePtr(str),它在性能方面更好,但是它并不是完全安全的,因为它没有考虑到c字符串是以null结尾的,因此字符串中不能有null结束符(这是Ruby字符串允许的)。另一方面,StringValueCStr()确实考虑到了这一点,因此可以确保您有一个有效的c字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50917280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档