找回密码
 注册
关于网站域名变更的通知
查看: 1186|回复: 7
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
UINT8    val_a;% w0 U& A, Y% p( n" s
UINT16  val_b;! [3 t; W% A" h3 \8 I  H
UINT8   a[2];
, v- @' }6 b5 Q% n* f1 @UINT8   b[4];1 X. ]: R0 I. ]2 r
UINT8   s[10]="123456789";
# E) m, @  e8 X: d( z....1 Q/ Y. U+ V; b- Z- I0 `
mEMCpy(a,s,2);  \  ^# M2 v3 |2 V$ E9 `, k+ q
memcpy(b,&s[2],4);. t+ a2 y+ i5 h, s
val_a = stroul(a,0,16);  ///字符转化成长整形; `; ]) C8 a: I9 ~/ T9 a" A0 X7 Z
val_b = stroul(b,0,16);
$ e( s2 z& {6 k1 h! Vprintf("val_a=0x%02x",(short)val_a);
) J! B" W* q2 w. D1 O4 c( S- Oprintf("val_b=0x%02x",val_b);6 X7 E& f% H4 L$ s' k9 @
....
  t+ M& i) g0 e7 k+ ~, R. G
/ U" A( g0 H8 d) E1 ?理论上应该得到的结果是:
3 j% b1 l2 x, t, }& w! {& h7 nval_a=0x12
- @* l7 p+ D2 \val_b=0x3456
0 x3 `/ `' B) d& G8 W7 m6 M! G
但是实际得到的结果却是
( y8 G8 a* l9 b& q. G+ S3 @val_a=0x56
9 a3 M3 v' ?+ Aval_b=0x34562 E. R3 ~: r# u# V4 r+ m; V6 O

" Y* A, s1 }  H3 ^- \* e
3 t/ S4 |' H4 `& F2 ^, b在vc6.0上得出的答案是正确的: j& m$ C9 p8 A( Z7 U) J: n2 c
但是在我的8051单片机上得出的结果却是错误答案
* z1 r1 i' b. }: F0 n' f
. q2 T7 v$ J# O0 N$ X: |0 A6 q5 G但是我将程序如下修改,可以得到正确答案$ [; w6 g* \: q, v* z
memcpy(a,s,2);6 A, W" e! K! S
val_a = stroul(a,0,16);  ///字符转化成长整形( l) \, U( U2 U- Q3 M7 B5 H
printf("val_a=0x%02x",(short)val_a);) E% j3 V% j, N# e9 l  A0 Y
memcpy(b,&s[2],4);+ v- @( h2 n7 }. q
val_b = stroul(b,0,16);
7 P# p, G$ s+ U2 a( {printf("val_b=0x%02x",val_b);
$ w( h. |$ V; t* c" U' X7 [: g$ ~7 s- _/ r3 N8 _% w# i+ d) [
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛
7 `) g- P* x& b: k' z) X* z, X% D7 ]- c2 h

该用户从未签到

2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char
& K" T/ V2 g4 @7 @. `. P6 n4 KUINT16是unsigned char short

该用户从未签到

3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?% M. L* D' `* W, h6 k+ l
uint8 a[2]; 改成 uint8 a[3] = {0};# B5 w1 Q% Y2 A5 k( o$ i
uint8 b[4]; 改成 uint8 b[5] = {0};1 e# e6 B# ^. D  }, |
字符串应该以0结束。

该用户从未签到

4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12$ M) a1 j! n( r
stroul函数,我没有查到,是将字符串转成长整形吗?$ Y3 p  |3 {4 k7 z1 x) ]1 R; h" o" f3 b
uint8 a[2]; 改成 uint8 a[3] = {0};7 |# J0 f- a; m. y) H
uint8 b[4]; 改 ...
  j" o! H' b8 W* _% I; \
还是一样错误,val_a错误

该用户从未签到

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

该用户从未签到

6#
 楼主| 发表于 2013-10-10 08:51 | 只看该作者
ArthurGXH 发表于 2013-10-9 22:03! M' x8 |9 V# x- t, g
把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。
: B+ f4 ?, F" B+ `  `. S
这是库函数,转换数据类型的,你百科下就知道了

该用户从未签到

7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑
; f, ^# q% _  j
; I* Y" Q. C  ^4 `6 ~楼主的函数写错了,应该是strtol。
  j8 v, V( E- J- F& E6 c8 u+ n) b楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}”。这个程序我试过,按我说的改就没问题。原因太简单,在3楼已经解释了,你仔细想想。

该用户从未签到

8#
 楼主| 发表于 2013-10-11 13:00 | 只看该作者
ArthurGXH 发表于 2013-10-10 14:324 G8 j/ {+ A/ ^4 L- C7 N; e
楼主的函数写错了,应该是strtol。
# i3 y8 W# A- D" W( J楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...

! ^' k& ?* D) C6 Y# a6 b% E
) k0 t0 R. J7 kab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解
& X* y" A2 L( ^" u# n" g9 Z
7 t. `" l4 w* H' Q2 j$ P8 u; n恩,查了下:( L! U% S! S2 i# P
strtoul(将字符串转换成无符号长整型数)- Q  d$ F6 f' w9 @/ i5 c9 u
strtol    (将参数nptr字符串根据参数base来转换成长整型数)
& S8 O% P# t3 h% s& Q& s2 u: k0 b2 n  T2 r
功能差不多,上面是转换成无符号整形,故有个u
) ?+ z* {" s% ]
/ z- Y: i! @4 Z
! B2 g5 C; M4 c0 f. C" B" t0 k! Q
* [9 g) k8 ]6 N& N6 O; a) O4 b% G* s4 O
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 13:49 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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