2010-08-31 15 views

Antwort

9

Es stellt die zval eine Zeichenfolge, Sie Z_STRVAL (oder Z_STRVAL_P/Z_STRVAL_PP, wenn Sie einen zval* haben/zval**) verwenden können.

Andernfalls können Sie die zval konvertieren, bevor:

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); 

Wenn Sie wollen nicht das Original zval ändern und Sie die resultierenden C-String zu ändern, können Sie tun:

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