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
上提供的解决方案
我正在尝试设置结构的 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
上提供的解决方案