找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

42

主题

723

帖子

2653

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
UINT8    val_a;0 q! |3 @7 j4 k7 z' f
UINT16  val_b;4 a. i8 M. s7 k" ^/ l/ X+ g
UINT8   a[2];
8 m: _1 ], V. F: ?& aUINT8   b[4];
5 |( A3 e- f# h+ ~UINT8   s[10]="123456789";
: B# R7 m: ^4 A; B1 R3 v....
! {9 I+ A, h+ S6 E4 u, l( Hmemcpy(a,s,2);
# m/ q8 o3 |* C5 g4 q& Y4 Smemcpy(b,&s[2],4);# t/ p' Q7 g5 k  T, S6 D2 Y
val_a = stroul(a,0,16);  ///字符转化成长整形
7 x9 R' _: K; Q& }( Bval_b = stroul(b,0,16);
9 E) h' s2 ], Kprintf("val_a=0x%02x",(short)val_a);0 @0 q; M8 P0 h7 b1 u% E% S7 Z
printf("val_b=0x%02x",val_b);3 B  f& }' a& B! e0 F, s' R
....# |) K3 {7 ?4 u: M! A; x5 y" ~

3 _8 P- x% q( s) ~9 a4 D理论上应该得到的结果是:
4 W2 m  T" a8 T' _0 Eval_a=0x12
- i0 ^/ L! F0 q* {+ wval_b=0x3456- M; O' N& ]  p: r' T3 t" P

* _6 E! U  `8 @* v1 E但是实际得到的结果却是: Q# _$ @9 L7 M
val_a=0x56
1 Q  A8 e" N9 E9 v5 Oval_b=0x34560 t' N: h6 S# s8 Z/ S6 _0 W! M' n
0 H: O' K6 B' r! ?. m$ M) k1 @3 z

2 [8 |) G. C2 d) k) c( Q! s在vc6.0上得出的答案是正确的4 [" d) j% V" f+ L9 {  g1 w
但是在我的8051单片机上得出的结果却是错误答案
3 {9 C7 ?+ S8 A9 g
8 D9 x( g5 M% P! F! m2 S但是我将程序如下修改,可以得到正确答案4 Q# Z. X" X% Z0 X* n% u
memcpy(a,s,2);
$ G; [% h& |+ s. z! X+ y+ x# pval_a = stroul(a,0,16);  ///字符转化成长整形
; [% N: s2 G  M5 X' `7 m8 P1 cprintf("val_a=0x%02x",(short)val_a);; I3 K: Y' L3 C, z" N) H8 e, f
memcpy(b,&s[2],4);
+ T; o2 z, T# D/ Ival_b = stroul(b,0,16);
9 T7 H0 c9 X9 }5 t# G- I, Hprintf("val_b=0x%02x",val_b);
; Y" D" S3 H+ o4 \
  |. \, v$ t7 o5 v这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛2 o- D. ^5 W9 _0 Z+ t
8 x' I1 S6 C  s1 h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char- D7 C$ R- f& Q0 ?4 T% Y
UINT16是unsigned char short

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?
) Q, `# w0 A6 o) Huint8 a[2]; 改成 uint8 a[3] = {0};' o/ j9 z0 v4 y& l/ V, w
uint8 b[4]; 改成 uint8 b[5] = {0};" n. P, q, r; W
字符串应该以0结束。

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12
& J! D; u5 J# W$ ~4 Tstroul函数,我没有查到,是将字符串转成长整形吗?% \! `% ~$ k7 U4 \0 a
uint8 a[2]; 改成 uint8 a[3] = {0};( E6 v* ^# O' q5 e' k
uint8 b[4]; 改 ...
2 ~8 o% P/ t3 d/ g8 u2 C* T  _! q
还是一样错误,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:03
2 i9 A& C" ?; ^! E+ [) T把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。
1 J1 N' |6 ~1 V0 P9 b
这是库函数,转换数据类型的,你百科下就知道了

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑
3 q9 b5 K, A8 `+ A8 `3 E2 u
. g$ l" K( J# C- e8 `* K/ X楼主的函数写错了,应该是strtol。1 w  f( [- _5 V
楼主仔细看我在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:32& e8 O* a* E: p# y
楼主的函数写错了,应该是strtol。# _( @  D6 b: Q* ^4 ?6 M
楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...

9 Y7 x' Z" |+ W
5 p% Q. S- I! z7 Yab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解0 T) |# z9 \, }: j) b

; K( _7 p- p+ J1 E+ k恩,查了下:
9 E6 B( X: B! istrtoul(将字符串转换成无符号长整型数)
" u3 H* ~8 r3 F, {* V! `. ustrtol    (将参数nptr字符串根据参数base来转换成长整型数)  v& |- S# n/ ~8 B
! {) M- j' I2 w  O* e( C% Q
功能差不多,上面是转换成无符号整形,故有个u7 U. s# p+ x  z' \- V- z: ?' U$ Z5 k: s
7 F- n) H  ^% v: l
& b. I/ y5 J+ ^

0 E, x, q) Q; N& t- S6 K( I. c- M7 [
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-10 00:57 , Processed in 0.109644 second(s), 32 queries , Gzip On.

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

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

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