Zval を char* に変換したい。私のphp拡張機能でそれを行うにはどうすればよいですか?
3199 次
1 に答える
13
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);
}
于 2010-08-31T23:55:14.720 に答える