Конвертировать Zval в char * - PullRequest
       39

Конвертировать Zval в char *

5 голосов
/ 31 августа 2010

Я хочу конвертировать Zval в char *.Как мне сделать это в моем расширении PHP?

1 Ответ

12 голосов
/ 01 сентября 2010

Если 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...