Строки
14 октября 2010 - Администратор
Рейтинг: 0
Голосов: 0
636 просмотров
Комментарии (0)
Нет комментариев. Ваш будет первым!
| ||||||||||
|
zval *new_string; char *string_contents = "This is a new string variable"; MAKE_STD_ZVAL(new_string); new_string->type = IS_STRING; new_string->value.str.len = strlen(string_contents); new_string->value.str.val = estrdup(string_contents); |
Обратите внимание на использование estrdup() Zend’а. Конечно, вы можете также использовать предопределённый макрос ZVAL_STRING:
zval *new_string; char *string_contents = "This is a new string variable"; MAKE_STD_ZVAL(new_string); ZVAL_STRING(new_string, string_contents, 1); |
ZVAL_STRING принимает третий параметр, который указывает, должно ли содержимое строки дублироваться (с использованием estrdup()). Установка этого параметра 1 вызывает дублирование строки; 0 просто использует предоставляемый указатель на содержимое переменной. Этот особенно применимо, если вы хотите создать новую переменную, ссылающуюся на строку, которая уже размещена во внутренней памяти Zend.
Если вы хотите отсечь стоку, начиная с определённой позиции, или уже знаете её длину, вы можете использовать ZVAL_STRINGL(zval, string, length, duplicate), который принимает длину строки как установленную для новой строки. Этот макрос быстрее, чем ZVAL_STRING, и работает безопасно в двоичном режиме.
Для создания пустых строк установите длину строки 0 и используйте empty_string как содержимое:
new_string->type = IS_STRING; new_string->value.str.len = 0; new_string->value.str.val = empty_string; |
Конечно, для этого также имеется макрос (ZVAL_EMPTY_STRING):
MAKE_STD_ZVAL(new_string); ZVAL_EMPTY_STRING(new_string); |
| ||||||
|
Нет комментариев. Ваш будет первым!