Strlen在实际使用中的一点体会
2016-07-14 17:03
357 查看
Strlen在实际使用中的一点体会
最近刚好时间比较充裕,可以对一些程序中的细节进行深入的挖掘。在运行的过程中发现一个奇怪的问题,运行的结果跟预想的有很大的区别。已知在程序中存在如下定义
unsigned
char PhoneNum[];
在另外一处对定义的这个变量进行长度的判断
PhoneNumlength = strlen((const char *)PhoneNum);
可以很直接的知道程序的目的是判断”PhoneNum”的长度,但问题也就是在这里。
很明显strlen需要遇到’\0’才认为是一个
str的结束。而我们单纯的对一个数组取strlen是不可取的,因为有可能数组的结尾根本没有‘\0’。这个时候返回的长度将会是内存中的下一个零地址的长度。
这次用到的PhoneNumlength是用来控制发送数据的长度,来决定我们缓冲区发送多少个数据。
第一次需要发送的数据是
”0891683108200105F011000D91688117886468F40008AA0A00640065006200750“
第二次需要发送的
“ATD18718846860”
而实际发送的是
“ATD18718846860 ;F011000D91688117886468F40008AA0A0064006“
从运行的结果可以猜测到,应该是判断长度上出错多发送了错误的数据。而这些多发的数据恰好是数据缓冲区中上次发送的数据。经过多次验证也确实如此,不过由于使用的是”AT指令集”,这个情况一直没有体现出来。
再对照strlen的说明也验证了这个猜测,将strlen的方式修改掉。之前存在的数据异常的问题就解决了。
相关文章推荐
- #新闻拍一拍# IBM 招聘广告要求应聘者具备至少 12 年 K8S 使用经验
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- vivi下重新调整分区
- QT学习 第一章:基本对话框
- ARM Linux系统启动
- Linux及ARM Linux程序开发笔记(零基础入门篇)
- 使用Shiboken为C++和Qt库创建Python绑定
- c++ primer 第五版 笔记前言
- Qt 5.6更新至RC版,最终版本近在咫尺
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析