php - 将 Zval 转换为 char*

标签 php interpreter php-extension

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

最佳答案

如果 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);
}

关于php - 将 Zval 转换为 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606125/

相关文章:

java - 在运行时从 Java 编译和使用 Groovy 类?

python - Python 语言中的 Unicode 名称是个好主意吗?

php - 如何将 zval* 转换为对象?

c - 如何在 php 扩展开发中调用 `callable` zval?

php - Windows 10 上的 Memcache PHP 扩展间歇性工作

php - 如何将 CRLF 作为参数传递给命令行程序?

javascript - 使用 jquery 使全景图从一侧移动到另一侧

Chrome V8 中的 Javascript && 运算符行为

php - Octobercms子关系的关系

php - 哪个 Paypal API/方法用于简单的 PHP 购物车支付