gpt4 book ai didi

php - 在 PHP_FUNCTION() C++ 中更改返回字符串的大小写

转载 作者:行者123 更新时间:2023-11-28 03:31:58 28 4
gpt4 key购买 nike

我想用 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 中我使用:

echo DoubleUp('sss');

但输出是:echo 'hello Ыõ'
那应该是:echo 'hello sss'
参数是一个很长的字符串。
现在我不知道我该怎么办。谢谢...

最佳答案

您的代码的问题是,如果您在“类型说明符”( 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));

关于php - 在 PHP_FUNCTION() C++ 中更改返回字符串的大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12281561/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com