字符串到char *转换

时间:2015-06-18 22:57:07

标签: c++ string

我在一个代码库中,对函数有很多函数调用,它们将指针作为参数。但是,函数调用传递一个“字符串”对象,就像它的指针一样。以下代码显示给您一个想法。

#include <vector>
#include <unordered_map>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <string>

using namespace std;

void dum(char *s) {
    printf("%s\n", s);
}

operator char* (string s) {
    return s.c_str();
}

int main(int argc,char *argv[]) {
    string st("Hello world");
    dum(st);
    return 0;
}

我不允许更改所有这些函数或函数调用的语法。我提出的一个可能的解决方案是添加一个运算符重载,但遗憾的是它不起作用,这是g ++(ver 4.7.3)的错误,命令行:g++ -std=c++11 te2.cc

error: ‘operator char*(std::string)’ must be a nonstatic member function

有什么想法吗?感谢。

UPDATE1

@ ferruccio的回答提醒我提到有像

这样的函数调用
dum(dum2());

其中dum2()是一个函数,如:

string dum2() {
    string s;
    //.....
    return s;
}

因此,如下所示的包装器不起作用(),编译器会给出错误no matching function for call to ‘dum(std::string)’

void dum(string &s) {
    dum(s.c_str());
}

2 个答案:

答案 0 :(得分:4)

operator char* (string s) {
    return s.c_str();
}

这是破碎的(如果允许的话)。当此函数返回时,s不再存在。因此,指向其内容的指针毫无用处。

答案 1 :(得分:3)

您可以为每个带char*的函数添加一个简单的函数重载。 e.g。

void dum(const string& s) {
    dum(s.c_str());
}