更改PHP_FUNCTION()C+;中返回字符串的大小写+; < P>我想用Visual Studio 2010创建PHP的扩展,我是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中,我使用:更改PHP_FUNCTION()C+;中返回字符串的大小写+; < P>我想用Visual Studio 2010创建PHP的扩展,我是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,c++,php-extension,Php,C++,Php Extension,在php中,我使用: echo DoubleUp('sss'); 但输出是:echo'helloЫõ' 这应该是:echo'hello sss' 参数是一个很长的字符串。 现在我不知道该怎么办了。 谢谢…如果在“类型说明符”(zend_parse_parameters的第三个参数)中指定“z”,那么代码的问题是zend_parse_parameters返回一个zval 要获取正确的字符串,可以直接使用“s”获取字符串: 在这种情况下,必须为字符串提供指向char*的指针,再加上指向int的指
echo DoubleUp('sss');
但输出是:echo'helloЫõ'
这应该是:
echo'hello sss'
参数是一个很长的字符串。
现在我不知道该怎么办了。
谢谢…如果在“类型说明符”(zend_parse_parameters的第三个参数)中指定
“z”
,那么代码的问题是zend_parse_parameters
返回一个zval
要获取正确的字符串,可以直接使用“s”获取字符串:
在这种情况下,必须为字符串提供指向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));
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));