为了账号安全,请及时绑定邮箱和手机立即绑定

php-ffi:分配结构体的 char*

php-ffi:分配结构体的 char*

PHP
慕娘9325324 2023-07-08 16:24:27
我正在尝试设置结构体 char* 的值。这是一个基本示例:$ffi = FFI::cdef('typedef struct    {        const char *name;    } example_t;');    $struct = $ffi->new('example_t');$struct->name = 'Test';// FFI\Exception: Incompatible types when assigning to type 'char*' from PHP 'string'我遇到了一个例外:FFI\Exception: Incompatible types when assigning to type 'char*' from PHP 'string'我的问题是:如何设置结构体的 char *name ?我的肮脏方法是创建一个字符数组,str_split字符串并将字符数组的键设置为分割的字符。FFI::arrayType(FFI::type('char'), [$length]);但通过这种方法,我遇到了空终止字符串的问题,并且也不知道如何解决它。PS:我只有基本的C知识。
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

解决办法是:


$ffi = FFI::cdef('typedef struct

{          

  const char *name;

} example_t;');


$struct = $ffi->new('example_t');

$struct->name = $ffi->new('char[5]', 0);

FFI::memcpy($struct->name, 'Test', 4);

var_dump($struct);

FFI::free($struct->name);

Dmitry Stogov 在https://github.com/dstogov/php-ffi/issues/40上提供的解决方案


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信