找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

42

主题

723

帖子

2653

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
UINT8    val_a;8 k( D! ]9 B; J7 _9 A4 e
UINT16  val_b;5 q3 Z% a! K* D2 K. U% @4 A
UINT8   a[2];$ N: N7 K' {' M$ O( N+ @
UINT8   b[4];
8 s& g0 |& b3 u7 x) s" G- DUINT8   s[10]="123456789";
: |, b+ A, [9 h7 O' |, D" ?0 K....
* n4 @8 E, ~9 o8 h; Y* ~memcpy(a,s,2);
! Z9 p+ m: S4 b* umemcpy(b,&s[2],4);
* J3 D- p/ c# s  Pval_a = stroul(a,0,16);  ///字符转化成长整形
" k2 \( ]$ i4 E! L+ Bval_b = stroul(b,0,16);# ~5 D: w4 p. U8 D+ `
printf("val_a=0x%02x",(short)val_a);9 i- W4 o; m/ t5 Z2 X8 B
printf("val_b=0x%02x",val_b);% Z8 u+ U. ^# y- W* ]
....
, q7 K, i* ^: P, C3 P% H
) e( ~( G7 |0 H理论上应该得到的结果是:5 \3 P! J. W) ^  W
val_a=0x122 u9 E0 X9 ]* N& G6 G3 w
val_b=0x3456
" U; s& t/ r+ o! K/ Z' k, ?" k; y* I8 [) W
但是实际得到的结果却是6 f( s  b: ~, q0 d
val_a=0x56; t; N; m4 s+ A
val_b=0x34565 O$ o$ _) b7 I! Q$ C
1 M& k; I' |7 F9 O. J

! g4 E7 j; E( x# X* E在vc6.0上得出的答案是正确的, S& y- a  k2 L
但是在我的8051单片机上得出的结果却是错误答案. P8 ^, }  h" x# d5 u: A; \6 \4 y

6 U3 b" ^. L4 R$ S但是我将程序如下修改,可以得到正确答案- c  d% L) d1 ~* G4 j6 e
memcpy(a,s,2);- h7 V) {4 ^* t- x/ }4 o& J5 C4 i
val_a = stroul(a,0,16);  ///字符转化成长整形' p9 [) d; v" |2 M4 }
printf("val_a=0x%02x",(short)val_a);
* }" H( E8 y3 K7 T  Imemcpy(b,&s[2],4);
: C$ f+ o0 s! }) u+ Z! Z( J# D( w' kval_b = stroul(b,0,16);3 X8 R1 A- I/ ~& m, {5 `) ^. R8 g6 L
printf("val_b=0x%02x",val_b);
: k9 L# g- L' T3 v/ W
( L1 o8 X) o5 i0 d  l这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛
$ \( P: b8 u) M0 S* G% J$ I% _2 D' r9 k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
8#
 楼主| 发表于 2013-10-11 13:00 | 只看该作者
ArthurGXH 发表于 2013-10-10 14:32& ^% z6 f0 J5 ?8 ?
楼主的函数写错了,应该是strtol。+ ^1 p- x" s# M' X
楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...

5 K0 M  J7 J" Y' z6 ^
# ]9 H  @+ x4 i" r, X  Mab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解
6 T- i7 |& q+ `( y, f& g- ?" c' c; A/ |7 B) O0 `4 [: c
恩,查了下:
- ~, \8 I9 p3 b0 z- Qstrtoul(将字符串转换成无符号长整型数)4 K$ l4 E/ k5 i1 e2 {
strtol    (将参数nptr字符串根据参数base来转换成长整型数)/ V- L! p/ j6 U
- n# h% [* F! ~+ ?# a1 Y- n2 `
功能差不多,上面是转换成无符号整形,故有个u
3 ^3 n9 H' s4 m* ?8 P: Z6 K* h8 J! u: Y/ [! {, {8 a
3 x7 E: J( w; A# e
5 R  k% V* n9 k
/ K: A' T. K4 \

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑 1 H' p, z1 J- \
5 a' N* c8 C1 u' P
楼主的函数写错了,应该是strtol。' }/ p6 u% o- L8 B8 I. a' K
楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}”。这个程序我试过,按我说的改就没问题。原因太简单,在3楼已经解释了,你仔细想想。

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
6#
 楼主| 发表于 2013-10-10 08:51 | 只看该作者
ArthurGXH 发表于 2013-10-9 22:03
+ }+ U+ h! K8 V  H* R' Q6 A, m把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。

# G9 s) f" i  O2 @这是库函数,转换数据类型的,你百科下就知道了

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
4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12. o+ t6 P) ?5 [/ a& B' m
stroul函数,我没有查到,是将字符串转成长整形吗?& ^' |+ E- \9 A- M; Y. ]5 Q- x
uint8 a[2]; 改成 uint8 a[3] = {0};/ s9 r2 J  c- u0 y* o
uint8 b[4]; 改 ...
  Y: b# }' F) L
还是一样错误,val_a错误

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?( `* q, {1 P' x: F* s1 |
uint8 a[2]; 改成 uint8 a[3] = {0};7 A( z* }8 a, x, \* s9 W3 U
uint8 b[4]; 改成 uint8 b[5] = {0};& O* ?: g9 [5 A" B
字符串应该以0结束。

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char' q. |4 o  A& N4 X
UINT16是unsigned char short
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

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

GMT+8, 2025-7-1 05:36 , Processed in 0.058459 second(s), 30 queries , Gzip On.

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

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

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