【问题标题】:Convert Zval to char*将 Zval 转换为 char*
【发布时间】:2010-08-31 04:54:25
【问题描述】:

我想将 Zval 转换为 char*。我如何在我的 php 扩展中做到这一点?

【问题讨论】:

    标签: php interpreter php-extension


    【解决方案1】:

    如果zval代表一个字符串,你可以使用Z_STRVAL(或者Z_STRVAL_P/Z_STRVAL_PP如果你有zval*/zval**)。

    否则,您可能必须在之前转换zval:

    zval *var;
    char *cstr;
    int cstrlen;
    /* ... */
    if (Z_TYPE_P(var) != IS_STRING) {
        convert_to_string(var);
    }
    cstr = Z_STRVAL_P(var);
    cstrlen = Z_STRLEN_P(var);
    

    如果你不想改变原来的 zval 并且你想改变生成的 C 字符串,你可以这样做:

    zval *var, *varcopy;
    char *cstr;
    int cstrlen;
    
    if (Z_TYPE_P(var) != IS_STRING) {
        ALLOC_INIT_ZVAL(varcopy);
        *varcopy = *var;
        INIT_PZVAL(varcopy); /* reset refcount and clear is_ref */
        zval_copy_ctor(varcopy);
        convert_to_string(varcopy);
    } else {
        varcopy = var;
    }
    
    cstrlen = Z_STRLEN_P(varcopy);
    cstr = estrndup(Z_STRVAL_P(varcopy), cstrlen);
    
    if (varcopy != var) {
        zval_ptr_dtor(&varcopy);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-29
      • 2013-10-18
      • 2012-01-15
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 2010-10-12
      • 2012-07-01
      相关资源
      最近更新 更多