作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 [example.cc] 中有一个方法:
std::string Car::accelerate (std::string n)
{
cout<<n<<endl;
return n;
}
我想从 php 扩展中调用这个方法
我在我的 [test_php.cc] 扩展中写了这个:
char *strr=NULL;
int strr_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &strr, &strr_len) == FAILURE) {
RETURN_NULL();
}
std::string s(strr);
RETURN_STRING(car->accelerate(s),1);
我有以下错误:
warning: deprecated conversion from string constant to ‘char*’
/home/me.cc:79: error: cannot convert ‘std::string’ to ‘const char*’ in initialization
/home/me.cc: At global scope:warning: deprecated conversion from string constant to ‘char*’
如果我通过简单调用 car->accelerate(s)
更改 return_string(..) _;它有效..它确实不打印任何东西作为返回函数。需要一些帮助。欣赏
最佳答案
鉴于您最近的评论,我建议将此作为(未受过教育的)答案。
RETURN_STRING() 在其第一个参数中采用 const char*
。这就是您所说的“C 字符串”,并且没有从 std::string
到 const char *
的自动转换(至少对于编译器而言)。
您要做的是传递一个 const char*
作为第一个参数。要从 std::string 生成 const char*
,您可以调用方法 c_str()
。 IE。将最后一行更改为:
RETURN_STRING(car->accelerate(s) . c_str(), 1);
关于php 扩展如何从一个方法返回一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7400833/
我是一名优秀的程序员,十分优秀!