对于std :: string :: c_str,无法从'const char*'转换为'char*'

Baz*_*Baz 3 c++

这给出了错误:无法从'const char*'转换为'char*'.

class Mock
{
public:
    ...
    static void func(char **result)
    {
          *result = (resultsI++)->c_str();
    }
static std::vector<std::string> results;
static std::vector<std::string>::iterator resultsI;
};

std::vector<std::string> Mock::results;
std::vector<std::string>::iterator Mock::resultsI;
Run Code Online (Sandbox Code Playgroud)

如何在不更改函数func的接口的情况下有效地消除此错误?该接口的实现者:

void (func*)(char **result) 
Run Code Online (Sandbox Code Playgroud)

忘了在签名中使用const char**.我无法改变它.

记住这是一个模拟,我只在我的单元测试中使用.

Mar*_*som 6

尝试:

*result = &(*resultsI++)[0];
Run Code Online (Sandbox Code Playgroud)

虽然这不能保证在C++ 11之前工作,但是在大多数或所有当前编译器上都可以正常工作.

危险的是,如果函数试图改变字符串的长度,你可能会得到一些讨厌的错误.更改个别字符应该没问题.

  • 这里的危险是对原始字符串的任何修改都可能导致它移动,并且它们不能保证它是'\ 0'终止,如果将它传递给C-String函数可能会有问题.如果我做了一件危险的事情,我喜欢明白这是危险的.通过使用`const_cast <char*>((resultsI ++) - > c_str())`你可以坚持下去,因为我们知道我们不应该使用const cast.这样你就知道你的代码很糟糕而且它很突出. (3认同)