[C语言] C语言变量强制转换问题

[复制链接]
1345|6
 楼主| wonderful111 发表于 2015-7-28 13:26 | 显示全部楼层 |阅读模式
函数原型:
uchar ucTest(uchar *ucInBuff,ushort usInLen, uchar *OutBuff, ushort usOutLen);

第一种情况:
uchar ucINBuff[500];
ushort usLen = 0;
uchar ucOutBuff[500];
uint uiOutLen = 0;

if( ucTest(ucInBuff, usLen, ucOutBuff, (ushort *)&uiLen) != TRUE )


第二种情况:
uchar ucINBuff[500];
ushort usLen = 0;
uchar ucOutBuff[500];
ushort usOutLen = 0;

if( ucTest(ucInBuff, usLen, ucOutBuff, &usOutLen) != TRUE )  

请问:第一种情况会有没有什么隐患?请详解一下。谢谢
sjnh 发表于 2015-7-28 13:44 | 显示全部楼层
函数第4个参数是 ushort , 第一种情况强制转换成指针了,肯定编译都有问题, 是不是你的函数参数定义错了;
uint,ushort有没有隐患就看他们两个的多少字节的长度;好像51系列都是2字节的,那就可以;
 楼主| wonderful111 发表于 2015-7-28 14:05 | 显示全部楼层
其实是这样的:
我使用的是STM32,不是8位MCU;
第一种情况是我之前一直使用的,但最近发现我们设备有时候操作时,导致整机复位;
后来发现是这个函数的原因,改为第二种情况就没有问题;
监控数据,发现:函数第4个参数,是数据包输出的长度,正常的话,返回2个字节,但出错的时候,返回的是536870914字节,即十六进制:20000002个字节...

现在不明白的是为何变成这样子?第一种情况以前一直没发现,也用了很长时间都没有问题的。请大神门分析一下..

@sjnh 你说:“第一种情况强制转换成指针了,肯定编译都有问题”
请问编译怎么都有问题?

函数第4个参数变量是可变的,最长不会超过4个字节长度
ayb_ice 发表于 2015-7-28 14:27 | 显示全部楼层
明明参数是变量(第4个参数),你传递个指针,这明显有问题

可能编译都过不了
 楼主| wonderful111 发表于 2015-7-28 14:35 | 显示全部楼层
不好意思,我写错了,
函数应该是原型:
uchar ucTest(uchar *ucInBuff,ushort usInLen, uchar *OutBuff, ushort *usOutLen);
sjnh 发表于 2015-7-28 14:49 | 显示全部楼层
wonderful111 发表于 2015-7-28 14:05
其实是这样的:
我使用的是STM32,不是8位MCU;
第一种情况是我之前一直使用的,但最近发现我们设备有时候 ...

强制转换成ushort后只操作uiOutLen的低2字节,如果高字节原来有数据是不变的,那么读uiOutLen那得到的数据就是错误的;

评论

正解  发表于 2015-7-28 15:08
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

54

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部