| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2217 人关注过本帖
标题:定义的字符串变量莫名奇妙的地改变了!【已解决,指针越界】
只看楼主 加入收藏
yang4055
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-8-18
收藏
 问题点数:0 回复次数:11 
定义的字符串变量莫名奇妙的地改变了!【已解决,指针越界】
最近编程时遇到一个问题,我在文件中定义了[bo]好多[/bo]类似以下的字符串变量:
char  STBLine1Array[]={0xAA,0x6E,0x0A,0x00,0x1A,0x00,0xC4,0xEA,0xA3,0xBA};
但在使用时这些字符串会[bo]自己改变[/bo],长度没变,但内容变了。这种情况经常会出现。别人说是可能是存放该变量的内存被改变了。请问高手这具体是什么原因,怎么解决?谢谢了!

[[it] 本帖最后由 yang4055 于 2008-10-15 14:34 编辑 [/it]]
搜索更多相关主题的帖子: 变量 定义 字符 
2008-10-07 10:44
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
指针或者下标越界造成的,仔细检查源代码

另外,叫做字符串的东西内部是不能带有0x00的
2008-10-07 10:48
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
代码发上来,不然没法帮你解决。OX00后面的东西一般会被无视~

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-10-07 10:50
yang4055
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-8-18
收藏
得分:0 
是这样的:
char  STBLine1Array[]={0xAA,0x6E,0x0A,0x00,0x1A,0x00,0xC4,0xEA,0xA3,0xBA};
这是要通过串口发到LCD的一个字符串,可以显示 “-> 年:”,然后调用函数
SIO_SendBytes(com, size, sendarray)来发送该串:
SIO_SendBytes(COM1, 10, STBLine1Array);//COM1是端口,10是长度,STBLine1Array是名字。
这个函数是硬件商提供的,已经做成库,没有细节。
在使用时经常会出现发送的数据不是自己想要的数据,通过printf输出,可以看到内容已经改变。
2008-10-07 11:04
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
那你就应该去看说明书或者咨询硬件厂商
我怀疑那个函数会把你给出的数组空间直接作为通信缓冲区
那就这样:
char ch[MAX_LENGTH]; //拿它作缓冲区


strcpy(ch,STBLine1Array);
SIO_SendBytes(COM1,10,ch); //要破坏就破坏ch,破坏不到你的那个数组了
2008-10-07 11:49
yang4055
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-8-18
收藏
得分:0 
我试试,看看能不能解决问题!谢谢各位!
2008-10-07 12:39
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
1 SIO_SendBytes的地三个参数是const char*还是单纯的char*呢?
2 你在SIO_SendBytes和初始化之间,有没有做任何操作?试验一下
char msg[10]={...};
//马上send
SIO_SendBytes(COM1,10,msg);
这样会不会出错。
3 如果在这种情况下,还出错,就使用5楼的做法吧。不过提醒你请使用memcpy,而不是strcpy。
4 如果2没有出错。检查这两个语句之间的所有语句,特别是指针和数组下标索引,极有可能是你溢出了。
5 终极方案:这样做,字符串一定不会改变的,定义成:const char msg[]={...};需要修改的时候,用memcpy复制到缓冲区修改。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-07 13:40
菜菜小
Rank: 1
等 级:禁止发言
帖 子:23
专家分:0
注 册:2008-10-7
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-10-07 14:41
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
一般能作为产品的库是不会有这种低级错误的,所以你还是要检查你自己的代码,肯定是你哪个位置指针操作越界了

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-10-07 16:20
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
大意了,大意了,呵呵
2008-10-07 18:40
快速回复:定义的字符串变量莫名奇妙的地改变了!【已解决,指针越界】
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018750 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved