找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

42

主题

723

帖子

2653

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
UINT8    val_a;
1 N% Q8 J, @! hUINT16  val_b;
# O- r: `) o% }3 cUINT8   a[2];
9 r: I/ I- ~! G, p0 DUINT8   b[4];
1 D7 E( H, f; [" ?0 t, E- fUINT8   s[10]="123456789";/ o/ @" m3 S7 n7 j" O* {& r2 |
....
$ w& B  ?$ N# _7 r& \$ kmemcpy(a,s,2);
$ l& `- b& g4 @0 t9 |9 Gmemcpy(b,&s[2],4);
, p# J. N; E, c+ Bval_a = stroul(a,0,16);  ///字符转化成长整形9 [. I: l; q" b5 K7 v; N! @
val_b = stroul(b,0,16);+ s/ p5 g; Y/ L8 |2 @# X  R
printf("val_a=0x%02x",(short)val_a);# a2 ^, n& n4 p, R, Q+ m, G
printf("val_b=0x%02x",val_b);; x9 ?' K4 _  W- M- [7 f
....
9 I8 r! M( P) G, j; F+ r& G6 i7 @) M
理论上应该得到的结果是:
0 d" _8 ?; C1 U% kval_a=0x12
9 h7 P, u" }  ]- h2 zval_b=0x34560 ]9 a  }0 e9 |9 ?% o/ b
) y# y6 n0 ]* h( U+ ~
但是实际得到的结果却是" Z8 C; z4 U) w* S
val_a=0x56  m0 G4 ^2 f; i2 U4 u2 B! Q/ ]
val_b=0x3456
/ L& N0 C' F2 N, p* }6 x% d/ V& }+ u# L
  C- o" |# k. J3 Q' P/ P
在vc6.0上得出的答案是正确的
6 E) `( P* o: |& u7 |* b. x但是在我的8051单片机上得出的结果却是错误答案
! x4 j4 Q* z( l7 ]3 `
& k  I" W: }3 @1 e! w% I但是我将程序如下修改,可以得到正确答案
+ `9 Q0 j5 k5 Xmemcpy(a,s,2);0 \# q% |+ [- S# X# J, y  b
val_a = stroul(a,0,16);  ///字符转化成长整形* X9 D, u# b: S9 A8 P6 t% j
printf("val_a=0x%02x",(short)val_a);6 E) ^& ~" G; K8 c' s  r  u- m
memcpy(b,&s[2],4);
7 ?' P0 l2 p2 pval_b = stroul(b,0,16);
( a! N* Q( d$ ^& E* k; Z# i8 V& [8 s7 Wprintf("val_b=0x%02x",val_b);& M9 W+ \9 l+ L8 [
0 w/ J( x1 V, _
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛
% E7 \% p. `4 G! b; c6 t: o& ~; q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char
1 b7 T/ u# ^! vUINT16是unsigned char short

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?8 c! E& @( {( X, ^, B
uint8 a[2]; 改成 uint8 a[3] = {0};: K- s2 ~. U7 W) N9 T' A8 W% n
uint8 b[4]; 改成 uint8 b[5] = {0};: W  L7 P' u# s9 e
字符串应该以0结束。

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12+ t/ X7 ?; z: q  G3 Q& _
stroul函数,我没有查到,是将字符串转成长整形吗?
: w* {: v. A$ H- b# ?; Uuint8 a[2]; 改成 uint8 a[3] = {0};
' i( C  p0 e' Y* H; M4 [uint8 b[4]; 改 ...
2 |$ [# q  ^) T2 k5 K2 t% {* p
还是一样错误,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* y% [7 e7 h5 B# l' [* E
把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。

" L6 N8 m$ l4 c' A0 g6 t这是库函数,转换数据类型的,你百科下就知道了

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑
/ ?2 h) H3 V3 U! }' y
6 b# ?0 h! x! ]楼主的函数写错了,应该是strtol。: i# X4 Z/ b+ H0 ]  B* U
楼主仔细看我在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:328 x, u  q5 `1 N; A) S9 K
楼主的函数写错了,应该是strtol。/ w8 v6 ]8 m0 V6 V6 K/ V# ^, i
楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...

2 {; |; U0 Z% o2 d7 e& {) `4 f' M! p2 T9 i6 E
ab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解
% C- S. L  ?8 o& P, J
: `: N+ T3 G/ N3 i: x恩,查了下:( T4 t  J4 L. r' v" D1 L. u( ^" M
strtoul(将字符串转换成无符号长整型数)" |: g" R/ a0 l5 o- s
strtol    (将参数nptr字符串根据参数base来转换成长整型数). x. i9 k6 r8 b: a5 I
3 y( N! A& x; H+ d, M+ m1 w
功能差不多,上面是转换成无符号整形,故有个u- h5 i! E/ E: L+ J8 Z9 Z
: Z% ?% k8 V$ R6 x1 m' L# B8 o
5 |" _) m. t# |/ z/ r/ ]4 ~" {
2 ]8 i5 _8 `: }

  U( K; f# Y. \! o/ A) K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

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

GMT+8, 2025-7-1 06:06 , Processed in 0.071871 second(s), 29 queries , Gzip On.

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

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

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