OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6146|回复: 3

结构体定义及使用遇到一个奇怪的问题,求助。谢谢!

[复制链接]

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-9-30
在线时间
2 小时
发表于 2015-10-17 23:12:12 | 显示全部楼层 |阅读模式
5金钱
调试中遇到一个奇怪的问题。定义了一个结构体变量,初始化的时候结构体变量的某一个元素总被前一个元素的赋值改写。代码如下:
typedef struct
{
uchar mark;
uchar TID; 
uchar PassType;
uchar encrypmark;    
uchar lenght[4];  
uchar powerinf[4];  
uchar LaneNo[9];  
uchar PassResult[33];
uchar alarmmark;
uchar alarmtime[20];  
uchar GUID[37];
}LANEDATASEND;
LANEDATASEND DataSendToServer;

初始化赋值语句如下:
DataSendToServer.mark = '$';
DataSendToServer.TID = '1';
DataSendToServer.encrypmark = '1';  

strcpy(DataSendToServer.LaneNo, "12345678"); //执行该语句后LaneNo可正常赋值,但是在后面会被无缘无故改写
DataSendToServer.lenght[4] = '\0';  
DataSendToServer.PassResult[33] = '\0';
DataSendToServer.PassType = '0';  
DataSendToServer.alarmmark = '0';
DataSendToServer.alarmtime[20] = '\0';
DataSendToServer.powerinf[4] = '\0';   //这个赋值语句改写了LaneNo[0]的值。
DataSendToServer.GUID[37] = '\0';

上面这个情况每次都会出现。我试着改变了结构体定义是各元素的排列顺序。把lenght[4]放到了LaneNo的前面。每次写给lenght赋值的时候,LaneNo同样第一个值也会被改写。这是什么问题,各位大侠帮忙分析一下,谢谢!



最佳答案

查看完整内容[请看2#楼]

楼主数组没学好,数组赋值越界了。DataSendToServer.powerinf[4] = '\0';这样赋值当然会影响后面的LaneNo[0]。powerinf[3]是数组powerinf最后一个成员。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2078
金钱
2078
注册时间
2014-12-19
在线时间
710 小时
发表于 2015-10-17 23:12:13 | 显示全部楼层
楼主数组没学好,数组赋值越界了。DataSendToServer.powerinf[4] = '\0';这样赋值当然会影响后面的LaneNo[0]。powerinf[3]是数组powerinf最后一个成员。
回复

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-9-30
在线时间
2 小时
 楼主| 发表于 2015-10-18 07:43:02 | 显示全部楼层
自己顶一下^_^
回复

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-9-30
在线时间
2 小时
 楼主| 发表于 2015-10-18 09:09:22 | 显示全部楼层
呵呵,谢谢!犯了个低级错误。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 13:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表