【问题标题】:php-ffi: Assign char* of a structphp-ffi:分配结构的 char*
【发布时间】:2020-06-30 14:35:28
【问题描述】:

我正在尝试设置结构的 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]);

但是使用这种方法,我遇到了空终止字符串的问题,也不知道如何解决它。

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

【问题讨论】:

    标签: php c struct ffi php-ffi


    【解决方案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 上提供的解决方案

    【讨论】:

      猜你喜欢
      • 2019-05-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多