库函数strlen源码重现及注意问题
2015-10-25 19:00
155 查看
首先直接上源码:
可以看到strlen是利用一个新的char*指针,一直向后遍历,找到字符串结尾的\0,的下一个元素。然后计算距离。
但是这里注意一点 size_t 其实是 unsigned int 类型的。所以比较两个字符串长度大小的时候不能使用 strlen(a) - strlen(b) 。因为两个无符号的整型相减是得不到一个负数的,所以不管怎么样得到的结果都是一个整数。也就是strlen(a)永远大于strlen(b)。
可以使用 strlen(a) > strlen(b) 这个表达式判断两个字符串的大小,不能使用 strlen(a) - strlen(b) > 0
size_t strlen (const char * str) { const char *eos = str; while(*eos++); return(eos - str - 1); }
可以看到strlen是利用一个新的char*指针,一直向后遍历,找到字符串结尾的\0,的下一个元素。然后计算距离。
但是这里注意一点 size_t 其实是 unsigned int 类型的。所以比较两个字符串长度大小的时候不能使用 strlen(a) - strlen(b) 。因为两个无符号的整型相减是得不到一个负数的,所以不管怎么样得到的结果都是一个整数。也就是strlen(a)永远大于strlen(b)。
可以使用 strlen(a) > strlen(b) 这个表达式判断两个字符串的大小,不能使用 strlen(a) - strlen(b) > 0
相关文章推荐
- 系统利益相关者
- dubbo+zookeeper实现分布式调用
- nio实现Socket长连接和心跳
- SQL语言的应用
- C++标准库头文件
- forward 和redirect的区别
- 原码、反码、补码、移码,二进制运算
- Ubuntu下关于crontab的使用详解
- STC15F2K60S2内E2PROM应用
- stata学习笔记(六):超额累进收益率
- pat 1014 Waiting in Line (30)
- javascript条件语句
- js快速判断IE浏览器(兼容IE10与IE11)
- 关于STC15F2K60S2看门狗的应用
- spark的检测系统
- nyoj-25
- 深入理解C++虚函数表
- Python多线程学习
- 回调函数在C/C++中的使用
- 回调函数在C/C++中的使用