php-ffi: 分配结构的 char*

php-ffi: Assign char* of a struct

我正在尝试设置结构的 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 字符串并将 char 数组的键设置为拆分字符。

FFI::arrayType(FFI::type('char'), [$length]);

但是使用这种方法时,我遇到了 Null Terminated Strings 问题,也不知道如何解决它。

P.S.: 我只有基本的 C 知识。

解决方法是:

$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

上提供的解决方案