字符串到字符* 的转换

string to char* conversion

本文关键字:转换 字符 字符串      更新时间:2023-10-16

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

#include <vector>
#include <unordered_map>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <string>
using namespace std;
void dum(char *s) {
    printf("%sn", s);
}
operator char* (string s) {
    return s.c_str();
}
int main(int argc,char *argv[]) {
    string st("Hello world");
    dum(st);
    return 0;
}

我不允许更改所有这些函数或函数调用的语法。我想出的一个可能的解决方案是添加一个运算符重载,但不幸的是它不起作用,这是来自 g++(版本 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());
}
operator char* (string s) {
    return s.c_str();
}

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

您可以为每个需要char*的函数添加一个简单的函数重载。

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