找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 714|回复: 7
打印 上一主题 下一主题

copy数据出现覆盖,神马问题?

[复制链接]

42

主题

723

帖子

2653

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2653
跳转到指定楼层
1#
发表于 2013-9-13 18:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
UINT8    val_a;
2 v9 P% q& x: P$ C" ?* o% P6 bUINT16  val_b;" d: e5 @! n# _' L9 `% s, @7 \, e
UINT8   a[2];; w) X0 C2 _- `, k, o; R# H2 t% ]
UINT8   b[4];
6 ~0 I) _* }; J1 r  rUINT8   s[10]="123456789";
3 d$ g' J+ o3 `+ k* A: }....
  T. o" n! F) {  K0 R& @! Tmemcpy(a,s,2);
* u! m! Q4 f7 k' J( c, K$ Wmemcpy(b,&s[2],4);
+ z" c, T4 S* G5 cval_a = stroul(a,0,16);  ///字符转化成长整形
6 L! X3 Y* e$ t" Z- g) @( D1 B, p: }val_b = stroul(b,0,16);+ P$ L8 ~, V! e) u1 z* x! p) U
printf("val_a=0x%02x",(short)val_a);/ ]# `8 f: V3 W8 M
printf("val_b=0x%02x",val_b);
0 D: Q1 q. b, l. H....$ [. P1 W6 ?" ]: H* Q& d

( `+ _# ?8 a; V( e+ O& Z( B理论上应该得到的结果是:
7 b% s$ B7 [5 Ival_a=0x12
: b: B) m! E/ R* L7 Z0 B- `val_b=0x3456
) A1 \3 i  l+ r7 R* \) N8 X/ l: r
+ ^) h! {5 Z" m& `9 C8 a# h+ A但是实际得到的结果却是$ \& O3 n# B9 F
val_a=0x567 |; q7 `- [! v: b$ f3 r
val_b=0x3456
% h/ j; _' L; C  F
" N7 `0 ]2 q5 M5 h8 h! I. D( u' D
0 d* {0 ~! P1 B& H% |# z; D4 C在vc6.0上得出的答案是正确的
" v9 e8 e! \- M! B7 D但是在我的8051单片机上得出的结果却是错误答案
7 H& H# p( |/ z$ E4 P" W% f2 |+ T( ?" P1 f, O
但是我将程序如下修改,可以得到正确答案
4 k6 e2 |# n/ I) M" ememcpy(a,s,2);
) E7 b$ d9 H; E& j$ Xval_a = stroul(a,0,16);  ///字符转化成长整形6 B2 z  o7 ?/ M2 U3 A1 M
printf("val_a=0x%02x",(short)val_a);2 |) K& \6 Q5 r0 c! ]
memcpy(b,&s[2],4);3 Y& V' ?4 d4 E( M
val_b = stroul(b,0,16);- S" z* q* H' I: w4 p$ N: s; x
printf("val_b=0x%02x",val_b);. p. }  J6 b! B" |; b- m8 @
0 F8 t/ a, M7 w2 Z7 x
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛4 P+ f8 q8 N$ }' T: X
) o) q$ A$ H: E3 Z5 D/ H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

42

主题

723

帖子

2653

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2653
2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char3 Y& ?4 l  F' D: R  B1 c! S
UINT16是unsigned char short

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?; h* ~( q2 i2 P* ~* p& {& q0 H
uint8 a[2]; 改成 uint8 a[3] = {0};
+ L/ Z- a: u" R1 Yuint8 b[4]; 改成 uint8 b[5] = {0};
4 e- ?0 F4 M/ h! j8 S- D, W- N9 O字符串应该以0结束。

42

主题

723

帖子

2653

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2653
4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:126 m& a5 e  W) N- g
stroul函数,我没有查到,是将字符串转成长整形吗?& {8 N- P2 f8 {# `0 y. ?2 d8 ?
uint8 a[2]; 改成 uint8 a[3] = {0};
. S2 W+ [# B# Q6 e/ Vuint8 b[4]; 改 ...
# d5 k5 s/ g  L& m9 i$ Z8 P3 k
还是一样错误,val_a错误

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
5#
发表于 2013-10-9 22:03 | 只看该作者
把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。

42

主题

723

帖子

2653

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2653
6#
 楼主| 发表于 2013-10-10 08:51 | 只看该作者
ArthurGXH 发表于 2013-10-9 22:03
9 h( ]7 i& ]/ W9 W  F" m' l% H把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。

0 X% G& C  _' D* Q+ i这是库函数,转换数据类型的,你百科下就知道了

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑
$ P7 [: M+ L7 j1 J! g$ j# c. s
& |. W# W- L. P4 A楼主的函数写错了,应该是strtol。
3 Z/ S3 t  Q9 U1 a& H# H楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}”。这个程序我试过,按我说的改就没问题。原因太简单,在3楼已经解释了,你仔细想想。

42

主题

723

帖子

2653

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2653
8#
 楼主| 发表于 2013-10-11 13:00 | 只看该作者
ArthurGXH 发表于 2013-10-10 14:32; O9 m( ~" w/ [  ]. g+ ~
楼主的函数写错了,应该是strtol。
8 p! `( D. W& B& [楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...

4 |2 p7 A2 @8 H5 V+ m$ |( I0 G/ d" q
- l7 A  B$ m  H3 Gab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解
/ M8 O  c. `8 U+ n; r
# ~. ?& H. t' h5 F* F' d( f: v- ^恩,查了下:
3 R0 Z" c+ B0 ~strtoul(将字符串转换成无符号长整型数)1 X4 Q8 L" _* O- x6 G; R) j1 I* Z
strtol    (将参数nptr字符串根据参数base来转换成长整型数)
) [4 a! w, K" F3 P7 c' v1 z, N: {$ R( F+ C- ~
功能差不多,上面是转换成无符号整形,故有个u6 q& p, q5 d$ X8 i' X) P
. j( l1 n/ ?6 `

% s# U  G: F3 H& _" g1 \. O2 |, L5 n: @4 z

* X' {3 z$ h' f' U/ Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-9-20 08:39 , Processed in 0.059717 second(s), 31 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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