我想将 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/