更改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_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的指

在php中,我使用:

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