猿问

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

我正在尝试设置结构体 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知识。


慕娘9325324
浏览 108回答 1
1回答

胡子哥哥

解决办法是:$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上提供的解决方案
随时随地看视频慕课网APP
我要回答