找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

42

主题

723

帖子

2653

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
UINT8    val_a;% x& G3 |% s: j1 s# e+ O! l
UINT16  val_b;
) [  k# z' N' [# [3 Z& l0 gUINT8   a[2];
9 w; Q: K# [8 O$ N* oUINT8   b[4];
  Q1 {# x, [/ JUINT8   s[10]="123456789";9 S7 S$ U, j# o( |- B* R
...." @  o7 h# ^  b! C0 R  w
memcpy(a,s,2);
# H( B: W% r, Q+ }$ Tmemcpy(b,&s[2],4);
3 d+ C' p- p5 U$ x: U8 J$ J9 Qval_a = stroul(a,0,16);  ///字符转化成长整形: H( `) y: G9 h5 L9 m, p$ t
val_b = stroul(b,0,16);
. m# P, G, _8 w, c) {( rprintf("val_a=0x%02x",(short)val_a);
+ B1 F1 b3 b9 I# w; F4 Bprintf("val_b=0x%02x",val_b);
  W. L; o$ {, R- a% w....
! W: \  N; t9 L( F( q5 O/ W
4 {; T) S9 `- p理论上应该得到的结果是:
+ t* V5 c2 O8 \val_a=0x12! [" o9 f2 b7 y! ~7 c0 e  Z9 C
val_b=0x34567 w& D% R6 h  u- X) y' q

/ I: M' Z6 j2 e  Z: }但是实际得到的结果却是$ n: V8 H& a5 U' `. i) U9 Z9 y
val_a=0x56# |! j& _! U8 a; Q
val_b=0x3456  B, w( x" W/ q

, I8 @' A" z8 n7 Z6 Q) x8 i  E" W( l* C! X9 `& b! G
在vc6.0上得出的答案是正确的
% }8 m' a* A6 ?! e# E: ^$ T但是在我的8051单片机上得出的结果却是错误答案
4 t5 {7 v+ i) X; H: O0 |( @  q
* B; C/ J; I# v但是我将程序如下修改,可以得到正确答案' o8 J1 P! l  s' [6 y3 W* {# G0 Q
memcpy(a,s,2);  N( Q2 ^* L" I  U- x( l4 ]- ]1 o/ X
val_a = stroul(a,0,16);  ///字符转化成长整形
6 O) v8 @4 N% j+ c) lprintf("val_a=0x%02x",(short)val_a);1 O  n4 `5 B  g
memcpy(b,&s[2],4);6 h+ w$ Y4 L2 {. {. l0 \
val_b = stroul(b,0,16);; b* \* X# r2 \2 `! B
printf("val_b=0x%02x",val_b);0 G) d1 Z+ R6 s# d. E) g+ `* a- A
: L8 N- \8 h( p* C# \- }
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛: V! t! U1 \0 `2 H+ b' X  C
; b4 w; K5 y8 m- p/ T- n5 L& n
分享到:  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
( Y! H7 u9 g; b2 t3 e3 @3 E; ^楼主的函数写错了,应该是strtol。
! @& L. H+ w. [+ z6 ^9 _- S楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...
6 s# s% b5 N, f3 O9 Q, H  G
) ^2 r9 l- T( f9 A  I; p( \8 V
ab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解
. q) n( b% Q: o$ T! f
6 e. G- d, ~# ?9 k* x恩,查了下:
5 U7 d0 V) i" _; m' @strtoul(将字符串转换成无符号长整型数)! B2 U5 k: X; s6 q; V0 {/ O
strtol    (将参数nptr字符串根据参数base来转换成长整型数)/ E& g; ^6 [' m2 W" I# q& n- G% ~
- S" G. O) o3 m+ Z6 W
功能差不多,上面是转换成无符号整形,故有个u
5 r1 m& I6 J* R* H/ H8 b
" t" O! B$ B. V7 A* o$ A8 r
% O' D/ `0 y- r. V, Z' Q& k2 z8 P& l/ m, n* F& P% k; @
/ F! u7 S8 F# |" x" i: z

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑 2 b8 l  d: o: T, l8 n9 D! w
7 f. e# G: N: ^4 b- W# X7 m
楼主的函数写错了,应该是strtol。0 {; k4 ~" v6 |7 Q* y7 D
楼主仔细看我在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
, `6 G# }. @: g把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。
6 a" Q* t8 Q  y  p: a. @% x% T1 D2 L+ f
这是库函数,转换数据类型的,你百科下就知道了

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' b& G  K( v( L. [
stroul函数,我没有查到,是将字符串转成长整形吗?; V+ F% P0 {! u0 Q6 T1 D
uint8 a[2]; 改成 uint8 a[3] = {0};7 u& Q7 f7 d4 Z" k- W
uint8 b[4]; 改 ...
4 Y: E! O/ u( W; y  j2 f
还是一样错误,val_a错误

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?8 W. L3 ~- x# m8 {) j* A9 U
uint8 a[2]; 改成 uint8 a[3] = {0};. N$ @5 X  E) M- b
uint8 b[4]; 改成 uint8 b[5] = {0};- S- Q8 R) o% h; ?3 Q6 c. \
字符串应该以0结束。

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char
+ q% H5 d! n  \& G% Q* F: NUINT16是unsigned char short
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-20 06:36 , Processed in 0.058377 second(s), 33 queries , Gzip On.

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

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

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