質問

私はchar *にZVALを変換したいです。どのように私は私の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);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top