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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
UINT8    val_a;
* n( n2 i& I: Y1 g& M# T! \! @UINT16  val_b;# m+ h2 `5 v; e' c9 l/ `
UINT8   a[2];4 U8 A$ j5 s' \& Z% }
UINT8   b[4];5 I" E, j. y2 \  J; r2 j
UINT8   s[10]="123456789";0 G5 _6 G3 _6 v/ c# H. e
....7 T" ~8 p$ h6 ^! P; R$ t  u4 \6 H
mEMCpy(a,s,2);/ x4 W7 V* Z; u2 K/ E
memcpy(b,&s[2],4);
( b" d: W8 `: O6 O* @) Oval_a = stroul(a,0,16);  ///字符转化成长整形! c- I) U( G+ J- W% x0 C
val_b = stroul(b,0,16);
; e+ e/ J4 X, X* |$ D' M& z' Wprintf("val_a=0x%02x",(short)val_a);# P! g- m/ o* w1 g/ H' Z  Y
printf("val_b=0x%02x",val_b);
, Q! j2 Q2 Q( K. }& G....
& G- W0 c1 L6 _/ ?% [1 I
% Y  Y) k& X4 n' q9 A4 K! ]理论上应该得到的结果是:
* j6 M, V5 L1 W9 J" L3 `val_a=0x12/ ^. Z) U3 C: m. J+ {
val_b=0x34561 F0 x* _) p8 b8 X4 Q/ R

1 X8 U1 U: ^( v但是实际得到的结果却是
) p) A$ d. u( v4 {/ W0 ?- w) r0 Sval_a=0x567 J9 h: {, k- @, M% D
val_b=0x3456: C) u1 V0 _( D  @; D$ c

, K+ w# F4 W9 p8 {
' J+ N& ?2 J+ t在vc6.0上得出的答案是正确的
& Q9 m; L) F4 c3 s但是在我的8051单片机上得出的结果却是错误答案( [$ X7 A3 J: `+ B9 |; g+ ^, T
1 X* j5 x0 a! z3 o; _
但是我将程序如下修改,可以得到正确答案9 q8 V) q/ L. S* p! e
memcpy(a,s,2);
3 i& O( R- O; Nval_a = stroul(a,0,16);  ///字符转化成长整形/ b: H0 {7 A# c. L! ^4 F
printf("val_a=0x%02x",(short)val_a);
; q2 ]/ F; G; `: pmemcpy(b,&s[2],4);$ F6 y7 x* a2 R. D6 f; J
val_b = stroul(b,0,16);( f. j* }( D! `" |1 p: T0 i* x6 {& x9 n$ J
printf("val_b=0x%02x",val_b);7 S7 y: S& e$ X% g$ w) D8 B- N

& y# e! ~% o5 T0 I, t这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛8 F# K" c0 I/ K0 X, ~% j/ e
+ R9 K8 v2 Z/ S- \* c

该用户从未签到

2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char' b' E1 N) Q; G/ m" ~* X. b4 ]
UINT16是unsigned char short

该用户从未签到

3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?
+ m1 @  ~% g: E( Q* r7 T; J: b. Euint8 a[2]; 改成 uint8 a[3] = {0};- ~  P3 B9 m7 K
uint8 b[4]; 改成 uint8 b[5] = {0};
4 M4 P* y) x/ ~9 o1 W) m& f! D字符串应该以0结束。

该用户从未签到

4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12
) \+ m, k# I% B0 }6 X* ~+ Ostroul函数,我没有查到,是将字符串转成长整形吗?) @8 Z6 P# F) Q1 ~% B0 i
uint8 a[2]; 改成 uint8 a[3] = {0};
2 b  O* q' j* U0 \% _$ l7 quint8 b[4]; 改 ...

  K! A& X* g& M  x0 |4 r还是一样错误,val_a错误

该用户从未签到

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

该用户从未签到

6#
 楼主| 发表于 2013-10-10 08:51 | 只看该作者
ArthurGXH 发表于 2013-10-9 22:03
" s0 ~+ ~* N( U把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。
! I/ J1 G& |( u
这是库函数,转换数据类型的,你百科下就知道了

该用户从未签到

7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑 ; u! k# z% Q7 M: n
- `6 I5 z* b! t( A& S# J# q5 C6 ^
楼主的函数写错了,应该是strtol。
, _0 b$ o2 A) Q; G- N1 C* r楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}”。这个程序我试过,按我说的改就没问题。原因太简单,在3楼已经解释了,你仔细想想。

该用户从未签到

8#
 楼主| 发表于 2013-10-11 13:00 | 只看该作者
ArthurGXH 发表于 2013-10-10 14:32% e* m( E2 z4 @. F: m0 q4 L
楼主的函数写错了,应该是strtol。. l" {( {( t8 }" D9 _6 P7 n
楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...
4 a4 d  r7 }  e1 k2 g$ q

  ?& x  U$ l9 E# a7 C6 p" Rab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解
1 g- Q% Q- M$ N% _% V! O. q- T( S1 @' I8 y+ A' b4 Y
恩,查了下:0 e# R+ `6 G0 z* Z' H9 c+ I
strtoul(将字符串转换成无符号长整型数)
6 C9 y$ A+ ^& {strtol    (将参数nptr字符串根据参数base来转换成长整型数)
0 I1 D: K: B- o6 {" I+ ], R, I: a6 e! L7 G# x
功能差不多,上面是转换成无符号整形,故有个u  K( T7 J, w. [+ S0 U/ L

( h1 W  o" u) Y2 g, Y7 q) G5 I. P; B" a& E  x
8 M( Q) ^- r9 y6 ~+ w; f
7 p+ ^1 y. M' f
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-28 17:02 , Processed in 0.062500 second(s), 23 queries , Gzip On.

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

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

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