您的位置:首页 > 编程语言 > C语言/C++

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的方式修改掉。之前存在的数据异常的问题就解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 2440 QT arm arm9