关于C++string的长度陷阱
2014-03-26 02:03
387 查看
std::string s = ...;
.....
assert(s.length() == strlen(s.c_str()));
一般认为这段代码是不会断言失败的,但是实际上这段代码可能是会断言失败的
std::string s = "ABCD";
s[2] = '\0';
std::cout << s.length();
std::cout << strlen(s.c_str());
std::cout << s.c_str();
assert(s.size() == strlen(s.c_str()));
我们可以看到s的length()返回4(即s的实际长度),strlen(s.c_str()返回2(即s中内容作为字符串的长度)
相关文章推荐
- 关于数据库字段长度对于查询性能的小测试
- C语言中strlen()函数和sizeof()函数区别[关于字符串长度]
- 关于结构体的长度问题(字节对齐)
- 关于零长度数组
- 【JavaSE】关于switch case的陷阱
- 关于安卓长度单位计算方法
- IOSTAT中关于%util,svctm存在的陷阱及解决办法
- 关于文本框输入长度验证实现
- 关于 killall 和 pkill 命令的陷阱 ,推荐使用 pidof 命令
- 【Unity】贝塞尔曲线关于点、长度、切线计算在 Unity中的C#实现
- 关于Http Get方法提交URL最大长度的限制
- 关于字段长度的设计的几个问题!
- 关于如何求无向无环图中所有两点之间的长度和
- 关于TextView限制长度的中英文混合输入
- 关于get请求参数的长度和post请求参数的长度的区别
- 关于 HTTP GET/POST 请求参数长度最大值的一个理解误区
- 求关于质数相除循环的长度和打印长度
- iOS开发陷阱之UITextField中文输入长度的限制
- c/c++和java中关于char的长度问题
- 关于IT培训的陷阱