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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
UINT8    val_a;6 q) }) v# T) R( D) l7 B
UINT16  val_b;
. s$ a. N( T7 a- @/ gUINT8   a[2];
% ?+ @  ]2 z, K/ E- I; n6 Q. OUINT8   b[4];* }, P* n% }/ ~- {5 Y; {
UINT8   s[10]="123456789";* z) A1 L" Q( \7 [
....7 S. Y& E2 m6 ^) E, z
mEMCpy(a,s,2);
( Y' o4 k$ K0 \3 jmemcpy(b,&s[2],4);
" n0 v; D' p: s  O- Q" @val_a = stroul(a,0,16);  ///字符转化成长整形
; m1 G1 L1 `1 z# |% K/ dval_b = stroul(b,0,16);# `  o8 \0 _, E* q0 T+ d
printf("val_a=0x%02x",(short)val_a);; K+ x2 u- [  B: Z" s
printf("val_b=0x%02x",val_b);
9 N  W2 c1 T! t8 M( K  P....; ?1 Q) X$ B2 M6 j
1 k% u: B  _6 O# S6 P! M' c
理论上应该得到的结果是:. y/ [2 {6 h; ^* Z# N
val_a=0x125 O. F, V+ B9 V# o7 M, g/ T
val_b=0x3456, X; v$ T. O. m4 y
$ w9 i) b2 d) i) I4 Y- Q7 @! r
但是实际得到的结果却是
4 Z9 L% c: P6 m! ^3 W' U5 F* _+ ~val_a=0x560 g1 y8 e. b$ ?$ o2 L! d
val_b=0x3456, `9 s# l' y9 k& Z
6 m% ~" \. y3 N3 ?' M  j
* l2 O4 r% {! w% D( n* T- D+ q' B- r
在vc6.0上得出的答案是正确的6 @9 h3 n  T1 S
但是在我的8051单片机上得出的结果却是错误答案
! M* H8 n( u* e: A, k* [, p5 _0 C6 n$ a; W, R3 B$ D
但是我将程序如下修改,可以得到正确答案# D/ l5 R( C  n
memcpy(a,s,2);7 ~- |- w. A) Q: u- [
val_a = stroul(a,0,16);  ///字符转化成长整形/ \/ T! T4 J- F
printf("val_a=0x%02x",(short)val_a);1 ?* x  }$ Q" A% U0 W
memcpy(b,&s[2],4);
* b& B# x+ t/ Q% Oval_b = stroul(b,0,16);
& W' V  M+ V; M4 p+ I8 Zprintf("val_b=0x%02x",val_b);
6 K  U; v) Y2 {4 O, `+ e, N3 n5 W- g: L) F' V
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛% x( I0 t3 C8 ^. P1 B

% i: I5 Z& P) T

该用户从未签到

2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char
1 ?! Y# Q* [( k  ]' }/ O5 Q. h4 N/ C* D( LUINT16是unsigned char short

该用户从未签到

3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?
( L, F) s# v6 p. f% ?; h! p7 Guint8 a[2]; 改成 uint8 a[3] = {0};
' ]% Q# O. I7 o; z' u! Iuint8 b[4]; 改成 uint8 b[5] = {0};( X1 \3 b: Z, _2 K' I7 M
字符串应该以0结束。

该用户从未签到

4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12
. q3 J. ~7 e! x5 `stroul函数,我没有查到,是将字符串转成长整形吗?
( J" i0 e& v1 fuint8 a[2]; 改成 uint8 a[3] = {0};
  D  L# B" U" q5 i: [uint8 b[4]; 改 ...

& F3 i9 K6 p9 ~# N4 R( `还是一样错误,val_a错误

该用户从未签到

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

该用户从未签到

6#
 楼主| 发表于 2013-10-10 08:51 | 只看该作者
ArthurGXH 发表于 2013-10-9 22:03* O2 a* v) t9 u/ V$ N
把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。

- m9 h' p6 |! @4 K4 p这是库函数,转换数据类型的,你百科下就知道了

该用户从未签到

7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑
& t8 @% }2 {% V8 W. L: P/ q+ {8 k+ O: W! l* |7 M
楼主的函数写错了,应该是strtol。# J+ k* b( I  K9 ?
楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}”。这个程序我试过,按我说的改就没问题。原因太简单,在3楼已经解释了,你仔细想想。

该用户从未签到

8#
 楼主| 发表于 2013-10-11 13:00 | 只看该作者
ArthurGXH 发表于 2013-10-10 14:32+ a) G9 D% }& j$ G: v: f0 u" P/ B
楼主的函数写错了,应该是strtol。
9 u4 I( F# L/ p  X9 w# q  _楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...

* w4 s5 ^( J5 M, I! s
. R( Z6 n2 G) |( `ab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解
$ \2 V" {) p+ G. E+ M
7 e3 c% T: c3 [  ^恩,查了下:4 |. o, P& F7 L) Q* U: f& g' _4 \5 R! ]
strtoul(将字符串转换成无符号长整型数)
# U6 t5 m: J1 @+ c, M# @strtol    (将参数nptr字符串根据参数base来转换成长整型数)5 [" j5 i2 G& f! u8 q7 s5 D$ k

: M( {6 T- k  a: ^! k7 Z功能差不多,上面是转换成无符号整形,故有个u
. R6 A* `) Q, b! G! H( A. _4 m: v- T8 g9 h' P6 x

# H: P6 H& ?+ F" b  m$ K' {# B
3 |  ^* s  G  C9 w) K4 F' g$ j( c: m$ q: m: s  V4 E  J5 p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-28 14:55 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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