C风格的字符串和std::string的比较
来源:互联网 发布:superjunior厂牌知乎 编辑:程序博客网 时间:2024/06/04 18:31
本文内容,同样适用于款字符串(wchar_t)
C语言中,用以0结尾的char数组存储字符串,例如字符串 ”123”,C语言中表示为字节 0x31 0x32 0x33 0x00
std:string则用指针 char*和长度值来存储字符串,例如字符串“123”,std::string 的char*指针指向0x31 0x32 0x33,长度值为3
因为,std::string有个长度数值来表示字符串的长度,所以std::string可以存储含有多个0x00的字符串。
但同时这也带来一个新的问题:C风格字符串和std::string的判等。
1、使用strcmp库函数比较
char * CStr = "\x31\x32\x33"; // 123
std::string stdStr("\x31\x32\x33\x00",4);
很明显,CStr和stdStr不等。但是strcmp(CStr,stdStr.c_str())==0,相等
2、std::string的操作符==重载
上例中,stdStr == CStr 为假,不相等
因为,std::string重载了操作符== ,其行为是:CStr的长度strlen(CStr)、内容,与stdStr的长度和内容完全相同。
因为strlen(CStr)为3,而stdStr的长度为4,所以不相等
一个很典型的例子:
char *str1 = ""; //空字符串
std::sttring str2;
str2.assign(1,0);// 分配给str2一个字节0,这时,str2长度为1,但仍然是一个C风格的空字符串
- C风格的字符串和std::string的比较
- std::string 和 c风格字符串
- c风格字符串与c++string的比较
- 完成一程序演示字符数组、C风格字符串、std::string和MFC中的Cstring类型之间的相互转换
- C风格字符串和C++的标准库类型string的比较
- c-风格字符串和string类型的字符串的异同
- C++ std::string和C字符串之间的问题
- C风格字符串和C++string对象的相互转化
- C风格字符串和C++string对象的相互转化
- c风格字符串和string使用的一些注意点
- C风格字符串和string类型的相互转换
- c风格字符串与c++string比较
- c 风格字符串和string
- string 与 c 风格字符串以及字符串常量的不同
- c风格字符串和C++的string在文件名方面的使用注意
- C风格的字符串
- c风格的字符串
- C风格的字符串
- ftp
- 基于antlr的表达式解析器
- convert dynmic page to static
- 将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置
- HDU 2059 龟兔赛跑 简单DP
- C风格的字符串和std::string的比较
- (考前水题)UVa 12299 线段树
- 非计算机专业的同学,不见得也要追求计算机基础扎实
- Qt 之 ZIP开源库 QuaZIP
- 从dll文件或者def文件生成lib文件
- X264命令含参数实例与参数详解
- 利用STK计算卫星外表面接收的太阳直接辐射
- 设计是权衡——实现多版本函数的代码中宏的位置
- 中山大学东校区配置 OH3C 路由,oh3c 提示can't load library 'libz.so'