博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数的指针参数强制类型转换异常
阅读量:4884 次
发布时间:2019-06-11

本文共 1442 字,大约阅读时间需要 4 分钟。

1. 本次遇到一个问题,首先看如下代码,unsigned char len取其地址作为函数的指针参数传递给get_imsi这个函数,其中第二个函数参数是uint16 *指针类型,但是实际传递的是uint8 *,然后程序运行的时候,直接异常跑飞。

uint8    cissys_getIMSI(uint8* buffer,uint32_t maxlen){    UNUSED(maxlen);    uint8 len = 0;    char     puc_imsi[NBSYS_IMEI_MAXLENGTH]     = {
0}; uint16 uc_len = 0; uint16 uc_loop; get_imsi((char *)puc_imsi,(uint16 *)&len); for (uc_loop = 0;uc_loop < len; uc_loop++) { uc_len += (uint16)sprintf((char *)(buffer + uc_len), "%u", puc_imsi[uc_loop]); } return len;}

2. 修改后的代码

uint8    cissys_getIMSI(uint8* buffer,uint32_t maxlen){    UNUSED(maxlen);    uint8 len = 0;    uint16 len = 0;    char     puc_imsi[NBSYS_IMEI_MAXLENGTH]     = {
0}; uint16 uc_len = 0; uint16 uc_loop; get_imsi((char *)puc_imsi,(uint16 *)&len); for (uc_loop = 0;uc_loop < len; uc_loop++) { uc_len += (uint16)sprintf((char *)(buffer + uc_len), "%u", puc_imsi[uc_loop]); } return len;}

3. 这个问题的关键在于,从来没引起我的注意,在函数参数是uint16指针,但是实际是uint8的取地址,引起这个异常的原因会是什么?首先len是在栈里面(一个字节),给其uint16(2个字节),分两种情况,第一直接赋值,那么应该不会有问题(编译器强制类型转换,取2个字节的低字节赋值给len,所以只修改1个字节),第二种,指针引用赋值,由于是直接操作地址,所以会擦除2个字节,导致异常。虽然是个很小的问题,但是很重要。

4. 工作总结,意识的改变,以前只想着我给老板打工,老板付我薪水,但是最近觉的,我想要做出优秀的产品,就像苹果手机一样,做到最好,让客户认可我们,做出优秀的产品才能证明我是个优秀的人。这是一次思想的转变。我开始注意工作的细节,如果产品做的不好,我会指出来,要求改掉,我以前不会这样的。以前只觉得,恩,做出来就可以了,算是完成任务,从来没想过这个产品做的好不好,市场是否需要。这个产品还能不能做的更好。

 

转载于:https://www.cnblogs.com/429512065qhq/p/8425787.html

你可能感兴趣的文章
Lucene学习总结之三:Lucene的索引文件格式(1) 2014-06-25 14:15 1124人阅读 ...
查看>>
node-sass 报错的解决方法
查看>>
Python:GeoJson格式的多边形裁剪Tiff影像并计算栅格数值
查看>>
免费下载知网文献的方法 | sci-hub免费下载SCI论文方法
查看>>
测试用例,变量之间,相互调用的方法,和修改原来初始化变量的方法
查看>>
ASP.NET MVC中将控制器分离到类库的实现(转)
查看>>
Poj 2304 Combination Lock(模拟顺、逆时钟开组合锁)
查看>>
Palindrome Number
查看>>
H5上传功能
查看>>
PHP命名空间(Namespace)的使用详解
查看>>
java项目@override报错问题
查看>>
DataTable 和Json 字符串互转
查看>>
Django中Template does not exit
查看>>
Redis安装 java中的连接 序列化 反序列化
查看>>
hdu 1896 优先队列的应用
查看>>
递推和迭代的比较
查看>>
OpenGL 头文件,库文件
查看>>
点与不规则图形关系判断
查看>>
linux不开启图形界面
查看>>
菜鸟学习SSH(二)——Struts国际化
查看>>