本文共 1134 字,大约阅读时间需要 3 分钟。
相信很多刚开始学习C/C++的小伙伴经常会遇到const char*、char*、string之间缠绵的转换关系,甚至有些时候有点迷糊,接下来就开始一起梳理一下...
1.const char* 和string 相互转换
//const char*转string,直接赋值const char* pc = "it container";std::string str = pc;//string转const char*,利用c_str()或者data()std::string str = "it container";const char* pc = str.c_str();const char* pc = str.data();
2.char*和const char*相互转换
//const char*转char*,利用const_castconst char* pc = "it container";char* c = const_cast (pc);//char*转const char*,直接赋值char* c = (char *)"it container";const char* pc = c;
3. char*和string相互转换
//char*转string,直接赋值char* c = (char *)"it container";std::string str = c;//string转char*, 1. string->const char*,2. const char*->char*std::string str = "it container";char* c = const_cast(str.c_str());
希望通过以上的小的基础知识点能够让让迷糊变得清晰。
另外,接触过C语言的伙伴儿都应该知道C语言风格的字符串要以'\0'结尾,那么为什么C语言风格的字符串要以'\0'结尾,C++不需要吗?C语言用char*指针作为字符串时,在读取字符串时需要一个特殊字符0来标记指针的结束位置,也就是通常认为的字符串结束标记。而C++语言则是面向对象的,长度信息直接被存储在了对象的成员中,读取字符串可以直接根据这个长度来读取,所以不结束标记。其实std::string:标准中未规定需要\0作为字符串结尾。因编译器不同,在实现时既可以在结尾加\0,也可以不加。但是,当通过c_str()或data()把std::string转换为const char *时,会发现最后一个字符是\0。C++11后,string字符串都是以'\0'结尾。
--|END|--
转载地址:http://teiii.baihongyu.com/