找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

42

主题

723

帖子

2653

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
UINT8    val_a;
- k! _  f, z" @) GUINT16  val_b;
8 i, Q/ C( Q: j; U- |UINT8   a[2];8 Y$ U& {" r1 H- [3 t' W
UINT8   b[4];) }  C) q+ W0 y0 ^6 e2 R, a) W0 x: m
UINT8   s[10]="123456789";
: P$ A0 o+ L5 B4 b! v' l- T....
" T( g  ~6 V) S2 Y6 g3 h4 `8 \  zmemcpy(a,s,2);
# x/ j4 Y! d# ^3 }3 A4 qmemcpy(b,&s[2],4);" L) R* ^5 n- L+ x& \' p3 s; f
val_a = stroul(a,0,16);  ///字符转化成长整形
0 w1 P+ l+ l, w6 Q  i8 L1 g. Jval_b = stroul(b,0,16);
) J( k' s. Z! K0 J/ I. j8 q& tprintf("val_a=0x%02x",(short)val_a);* \; m+ ~2 o' N: ]8 a
printf("val_b=0x%02x",val_b);! g: B3 p' ~" g6 N* Q" Q0 U
....
+ v) M) `, n" F7 k% x5 P( @7 A4 M, g& ~0 Q4 F5 z) [
理论上应该得到的结果是:
. K; W4 {: K: a* oval_a=0x12
0 F. a* Z) u/ t; S9 P' P: l3 vval_b=0x3456
6 c' U; c$ J4 B' |: L; `) F9 M; `3 I$ r( d7 v$ X* x2 Z
但是实际得到的结果却是% `% k) l1 ?- D$ c* P) [1 v- P
val_a=0x56  n# x! I1 a- a7 K; |
val_b=0x34568 D4 _9 x- e# R+ s0 {5 E& {5 N
# f: a6 F5 U) T

* H) a! o1 R( k' c6 o在vc6.0上得出的答案是正确的
" S0 c3 D% R+ V1 \! H但是在我的8051单片机上得出的结果却是错误答案
5 y0 _9 H6 x) l0 E
2 X. f. S+ H' |! q2 I但是我将程序如下修改,可以得到正确答案, l# D7 ~0 P0 k# p, u' g  Q
memcpy(a,s,2);. l$ |  b" d1 i# \5 V$ }
val_a = stroul(a,0,16);  ///字符转化成长整形
( O& U. h3 d/ ~0 \. ^! Jprintf("val_a=0x%02x",(short)val_a);
. `) Y. b1 e- X) Y' gmemcpy(b,&s[2],4);; r, j. D6 f& |! t: t6 C, ~
val_b = stroul(b,0,16);9 j0 X$ p$ S: h( ]( ]
printf("val_b=0x%02x",val_b);6 g: r3 r% A: ?

7 w- L6 V' H5 R! P这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛1 P; ~. Q7 Y# x6 v
$ X4 K& h& T- R+ |! y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char2 p9 |4 S5 F! M1 R
UINT16是unsigned char short

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?) J  v4 ?% w# }4 m' }* Z! b/ ?
uint8 a[2]; 改成 uint8 a[3] = {0};
9 U! ?* o* J0 L* q/ puint8 b[4]; 改成 uint8 b[5] = {0};7 F$ [  ~$ x+ a: ?
字符串应该以0结束。

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12
6 H1 G1 R8 j' i- Sstroul函数,我没有查到,是将字符串转成长整形吗?
% N2 [+ c2 ~% ]! Uuint8 a[2]; 改成 uint8 a[3] = {0};6 V8 r4 c/ H$ {7 Q; b
uint8 b[4]; 改 ...
+ T& J8 d" G& V5 F9 @2 ^, \
还是一样错误,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:034 t1 s+ f" r% |7 n7 s
把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。
, V9 e8 K2 o6 R% m- e( A, n
这是库函数,转换数据类型的,你百科下就知道了

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑
3 T6 e9 G' e; f* ^" j9 G6 |3 U. C* G* R9 d# X0 X3 m; c
楼主的函数写错了,应该是strtol。
0 [8 p* a% ^/ g, V1 Z+ w8 c+ W楼主仔细看我在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" m9 M: d+ z* Y5 |0 s% V
楼主的函数写错了,应该是strtol。! Y  @$ B! @5 t0 _
楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...
( A" Q) R; d5 h1 W9 o: H

# T, _6 Y# `( `+ h! j8 x$ H& c8 Oab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解" v+ i; l" ?: }

/ s+ v% \! \6 {" i) e恩,查了下:
( Z: s) p- I, c: N7 t, zstrtoul(将字符串转换成无符号长整型数)9 q2 @! w. v% I  t7 L& j6 k
strtol    (将参数nptr字符串根据参数base来转换成长整型数)
, A! o! I* u7 u5 I; B
7 W7 f; Z$ T6 H% A' N2 {- Q1 t功能差不多,上面是转换成无符号整形,故有个u
. O: K" u9 y3 {6 x$ i
3 w7 ]1 i! b  y) i- j& Q
5 `( p( m; X4 ?2 o( f  `; w; y/ U1 @6 }! F
/ B# I  l5 M! h
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-10 00:30 , Processed in 0.064990 second(s), 31 queries , Gzip On.

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

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

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