找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

42

主题

723

帖子

2653

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
UINT8    val_a;* u3 g. @6 G! K9 O. E% q" n
UINT16  val_b;
2 K: f( g) n8 N2 ?) X1 u! [0 NUINT8   a[2];
7 L. v9 J3 J( o' z* x' i' @UINT8   b[4];
$ l$ N! e) @, I8 d2 `6 F* wUINT8   s[10]="123456789";
; ^6 S$ ^4 R# b3 ]' u0 d  u....7 w( \* `( C9 l0 V- o8 A
memcpy(a,s,2);
3 V* n& y. {; H/ Z( Q/ t1 N: Mmemcpy(b,&s[2],4);; Y$ M% m  N6 p9 ]( h; o
val_a = stroul(a,0,16);  ///字符转化成长整形
5 a; z  `! s+ f1 r2 @9 _6 Mval_b = stroul(b,0,16);
/ M4 E2 j) h# p8 k: e2 G0 ?" bprintf("val_a=0x%02x",(short)val_a);
0 m. `) x; \* L8 R' ~5 nprintf("val_b=0x%02x",val_b);  i8 P5 |/ E6 D
....
# G/ I5 ?4 }. Y7 w/ d! u
5 ~* f) k9 j$ C4 B7 z理论上应该得到的结果是:1 R0 {2 k1 {. Z3 h; r
val_a=0x129 \" }$ F6 r" p7 ?6 ?) z
val_b=0x3456; u# k" G' j, C1 H; }- `

8 P- q1 r* c  B. s7 _1 G但是实际得到的结果却是
/ u  e7 i" B$ G% A$ xval_a=0x56
6 b. m4 N: Z. S" F5 A2 g  ]  rval_b=0x3456
; {& D8 J( A( J: A$ k4 @5 \- F9 I9 F& T
& {/ A& D- k) Q& q+ c8 x& s$ ~# g; R( J( F7 m) R0 d
在vc6.0上得出的答案是正确的' h: Z( ?3 z' L" i$ p6 L+ s
但是在我的8051单片机上得出的结果却是错误答案
% Q* s1 l- i$ G) ^4 {' \& E$ Q
9 v+ C0 `4 g5 C5 G4 u  E但是我将程序如下修改,可以得到正确答案
4 q! A' f5 @, O: c3 Ymemcpy(a,s,2);
, f. J3 O$ r! M' g+ [) f3 U3 O9 Yval_a = stroul(a,0,16);  ///字符转化成长整形( Q3 _$ U, c; W, B" a3 y: n
printf("val_a=0x%02x",(short)val_a);1 [9 [6 e6 ^* d* C. V
memcpy(b,&s[2],4);/ a+ ?. N! [: ?7 g
val_b = stroul(b,0,16);
  m& O8 F: X, v- C7 D5 J" v/ I0 uprintf("val_b=0x%02x",val_b);
/ l! p$ [2 c2 ~, v; R' D8 \8 f: h9 q. \  @0 u" ?9 R" M$ p
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛; e  A* C4 L8 a! t; @* v5 _& O

, j) \+ e8 f6 \4 e5 `! _* ^. }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char
: ^4 t1 h* O" W0 O& W% n1 b, oUINT16是unsigned char short

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?
$ d  H0 T  u6 [7 Kuint8 a[2]; 改成 uint8 a[3] = {0};: S, b- }; C6 o
uint8 b[4]; 改成 uint8 b[5] = {0};
0 ?' e! I; \. p) J4 Q, T字符串应该以0结束。

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12
* F' K1 i% d# [6 T2 u4 |stroul函数,我没有查到,是将字符串转成长整形吗?
* ^* m# o7 G3 A; x- w- Kuint8 a[2]; 改成 uint8 a[3] = {0};
. N5 ~+ k, q2 i4 Juint8 b[4]; 改 ...

+ G, s1 O; H4 W: G1 O, z9 X) {( h: j还是一样错误,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:031 P& X5 y+ i3 [$ F3 Y
把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。
9 o5 _8 n* a' n8 O$ F4 T
这是库函数,转换数据类型的,你百科下就知道了

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑
" I  J* K4 M2 S- w8 d# r$ K' ~, Z3 |! F: d9 Q4 B
楼主的函数写错了,应该是strtol。# }. a# p, G5 D" O6 X( D
楼主仔细看我在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:329 k  ~: S/ u3 p3 I1 o& Y; ]( ?9 \
楼主的函数写错了,应该是strtol。
- z8 s3 g& {7 T+ U1 b  u4 g, _6 ?楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...
( N4 t/ h' P: M1 R3 v. D

4 i- e1 \" I6 B1 b, k/ J: q% tab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解+ R# ?+ O- ]( y$ J5 G" s; m+ U2 _
, ?( {8 ^: a: [/ E. o
恩,查了下:- S. s$ ?6 @9 O! _$ @+ C) ~' A
strtoul(将字符串转换成无符号长整型数)  O# N3 m5 t8 \$ L" J
strtol    (将参数nptr字符串根据参数base来转换成长整型数)4 D# a8 w3 M1 |4 R3 f: u
7 ~3 ]) V. v  k0 G# y9 v' ^8 m
功能差不多,上面是转换成无符号整形,故有个u
+ z4 v0 ]: X  I" o9 ~
, f( c! j8 Q0 }& t! Y$ d' w. q
% [( h% U8 c! s4 ]+ R) b) U; M/ }1 E( p8 ^( q
% o* v# D, q3 r" B+ K% w7 ~4 b
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-20 00:59 , Processed in 0.059664 second(s), 31 queries , Gzip On.

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

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

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