PHP扩展如何从方法返回字符串


php extension how to return a string from a method?

我在[示例]。[c] a方法:

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*’

如果我改变了return_string(..) _与一个简单的调用car->accelerate(s);它的工作原理。这是真的,它不输出任何东西作为返回函数。需要一些帮助。欣赏

考虑到你最近的评论,我建议这是一个(没有受过教育的)回答。

RETURN_STRING()的第一个参数是const char*。这就是你所说的"C-String",并且没有从std::stringconst char *的自动转换(至少对编译器来说)。

你要做的是传递一个const char*作为第一个参数。要从std::字符串生成const char*,需要调用c_str()方法。例如,将最后一行更改为:

RETURN_STRING(car->accelerate(s) . c_str(), 1);