Я хочу создать расширение для PHP с Visual Studio 2010, я новичок в C ++.
моя последняя функция в C ++:
PHP_FUNCTION(DoubleUp){
char* text;
int len;
char string[255];
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &text) == FAILURE) {
RETURN_STRING("Invalid Parameters",true);
}
len = sprintf(string,"echo 'hello %.78s'", text);
RETURN_STRINGL(string,len, 1);
}
и в php я использую:
echo DoubleUp('sss');
но вывод: echo 'hello Ыõ'
которые должны быть : echo 'hello sss'
Аргумент — это очень длинная строка.
Теперь я не знаю, что мне делать.
Спасибо …
Проблема с вашим кодом в том, что zend_parse_parameters
возвращает zval
если вы укажете "z"
в «спецификаторе типа» (третий параметр zend_parse_parameters
).
Чтобы получить правильную строку, вы можете получить строку напрямую, используя «s»:
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &text, &len) == FAILURE) {
В этом случае вы должны указать указатель на char*
для строки плюс указатель на int
держать длину строки.
Второе решение заключается в использовании zval
правильно и получить строку из zval
:
zval* text;
int len;
char string[255]
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &text) == FAILURE) {
/* ... */
}
// cast the value to string
convert_to_string(text);
// get the string value with the Z_STRVAL_P macro (Z_STRLEN_P for the length)
len = sprintf(string,"echo 'hello %.78s'", Z_STRVAL_P(text));
Других решений пока нет …