字符串到字符* 的转换
string to char* conversion
我在一个代码库中,其中有很多函数调用将指针作为参数的函数。 但是,函数调用会传递一个"字符串"对象,就好像它是指针一样。 显示以下代码是为了给你一个想法。
#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());
}
相关文章:
- HEX值到wchar_t字符(UTF-8)的转换
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 转换特殊字符(UTF-8)
- 将转换字符键入 int 以用作向量C++的索引
- 将字符随机转换为大写的函数
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 转换字符时Arduino DUE 和 Arduino UNO 之间的区别
- 如何在C++中正确重载运算符转换字符*?
- 如何转换数据结构以在 c++ 中转换字符*
- 不兼容的转换字符
- 将转换字符数组[16]键入为int 128位
- 在c++中转换字符编码
- 使用递归转换字符
- 如何在Objective-C/C/C++中转换字符和字节的位置
- C++到Pep/8汇编语言的转换——字符数组
- 转换字符>十六进制