c_str使用规范
来源:互联网 发布:神知结局形象 编辑:程序博客网 时间:2024/06/03 22:58
假设我要使用一个别人写好的f(char *)函数,但是我只有一个string对象 string s="hello"
因为f的参数类型是char*, 而s的类型是string,那该怎么办呢?
好在string类提供了一个c_str函数,能够返回底层的char*指针
所以我们打算这样用:f(s.c_str())
但是这是错误的,因为c_str返回的是一个const char * 类型,而f的参数是char*类型。
所以必须进行强制转换:f( (char*)s.c_str() );
但是这样做是有危险的,因为f并未保证不修改该字符串。
假设我们有一个const的string的话
const string cs = "world";
f( (char*)cs.c_str() );
那么cs的内容将可能被修改,显然违被了我们的本意。
所谓的稳妥办法也就是将s的内容拷贝一份
string s = "hello";
char * scopy = new char[s.size()];
strcpy(scopy, s.c_str());
f(scopy);
如果f的定义很规范的话,f在不修改字符串的情况下会被声明为 f(const char *)
那么可以直接这样使用: f(s.c_str()), 这样就不必进行(char*)转换了
你可以看一下c++标准库里字符串相关函数的声明,
凡是不修改内容的地方一律声明为const char *, 这就叫规范
strlen(const char *)
strcmp(const char *, const char *)
strcpy(char *, const char *)//第一个参数会被修改
因为f的参数类型是char*, 而s的类型是string,那该怎么办呢?
好在string类提供了一个c_str函数,能够返回底层的char*指针
所以我们打算这样用:f(s.c_str())
但是这是错误的,因为c_str返回的是一个const char * 类型,而f的参数是char*类型。
所以必须进行强制转换:f( (char*)s.c_str() );
但是这样做是有危险的,因为f并未保证不修改该字符串。
假设我们有一个const的string的话
const string cs = "world";
f( (char*)cs.c_str() );
那么cs的内容将可能被修改,显然违被了我们的本意。
所谓的稳妥办法也就是将s的内容拷贝一份
string s = "hello";
char * scopy = new char[s.size()];
strcpy(scopy, s.c_str());
f(scopy);
如果f的定义很规范的话,f在不修改字符串的情况下会被声明为 f(const char *)
那么可以直接这样使用: f(s.c_str()), 这样就不必进行(char*)转换了
你可以看一下c++标准库里字符串相关函数的声明,
凡是不修改内容的地方一律声明为const char *, 这就叫规范
strlen(const char *)
strcmp(const char *, const char *)
strcpy(char *, const char *)//第一个参数会被修改
阅读全文
0 0
- c_str使用规范
- c_str()使用举例
- c_str()使用举例
- c_str()的使用
- c_str的使用
- C++ c_str()使用总结
- c_str()
- c_str()
- c_str
- c_str()
- c_str()
- c_str()
- c_str
- c_str
- c_str
- c_str()
- c_str
- c_str
- springboot整合pdf.js用文件流预览本地磁盘pdf文件
- Power BI 学习要点
- 基于mobilenet-ssd训练车牌识别模型
- Oracle数据库通过PLSQL只导出数据
- 用callflow画流程图
- c_str使用规范
- 欢迎使用CSDN-markdown编辑器
- 算式类型字符串表达式读取并计算出结果(简单四则运算)--后缀表达式计算
- 在类中调用opencv的setMouseCallback
- fabricjs clipTo
- matplotlib.pyplot
- 表格游戏!
- Java题目Matrix_Add
- 揭秘Angular 2-基本类型