找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

42

主题

723

帖子

2653

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
UINT8    val_a;
- }. }6 r5 W: F2 [" FUINT16  val_b;! P6 i& f* v: T, Z
UINT8   a[2];8 \' t8 h, v# ~2 A6 `+ L2 U4 r
UINT8   b[4];
4 U& K& L- N7 W  P) E  CUINT8   s[10]="123456789";
0 N, C. p$ A- l; f, _" S....
2 L8 M9 v1 R4 T& I2 ~$ `7 k+ vmemcpy(a,s,2);
! a) `+ Z- b- t7 Dmemcpy(b,&s[2],4);: D2 u' H6 n0 v% o$ k: |; w
val_a = stroul(a,0,16);  ///字符转化成长整形9 E& J: p  n: D
val_b = stroul(b,0,16);- {: B' r+ y/ l2 u
printf("val_a=0x%02x",(short)val_a);
0 W1 S2 Y  [# u6 O3 }! W; o( M6 Gprintf("val_b=0x%02x",val_b);
+ z* z3 F, I, B2 ^3 u9 M7 [....
" Z9 P) G0 N9 D: Z7 z; G% ?  N0 h
( K" |! e0 d/ F; b理论上应该得到的结果是:5 N  {1 x/ Y+ M) X
val_a=0x12
" |* x, ~( Q* v) h; lval_b=0x3456
/ z! J, K: w' L2 E1 p
2 W9 \0 u7 ~( f; m但是实际得到的结果却是5 e8 ]: h' T2 c3 f
val_a=0x56
( F% w. U4 O$ @& Jval_b=0x3456( Q" x: W% t& N! ]) t
& M8 J8 f; X0 ~' [

0 E' B) e: {# d: ?  f8 Z在vc6.0上得出的答案是正确的5 \3 n) n  l6 e. Z* H8 z
但是在我的8051单片机上得出的结果却是错误答案
8 a) E" i+ `5 W$ ^& N% O
8 m- Y) M! R' P( g但是我将程序如下修改,可以得到正确答案0 L6 T2 }8 N9 T0 J/ N0 V$ }% G' {9 c
memcpy(a,s,2);
# X! ~6 x* `1 D- U  V6 zval_a = stroul(a,0,16);  ///字符转化成长整形( k7 L" @9 E$ a) z2 ^, A
printf("val_a=0x%02x",(short)val_a);
! C$ I' g0 p1 smemcpy(b,&s[2],4);
" n, c2 Q9 B/ `' M  ^% B) y) Wval_b = stroul(b,0,16);
4 g3 Z) Q; B" g1 i+ pprintf("val_b=0x%02x",val_b);
% Y" l0 C# j4 r5 @3 {3 w7 I1 S/ n9 U
这样就可以得出原因就是被覆盖了,但是我不知道为什么会被覆盖,有人跟我说明显会被覆盖的,但是我真心不知道,为毛' Q3 i* ^! b, s- Z" O6 A3 x  t( e
: E. V, W! [% w! z6 q- Z; q5 X. S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
2#
 楼主| 发表于 2013-9-13 18:47 | 只看该作者
UINT8是unsigned char
7 z/ i5 J8 G& c! z+ V! U8 OUINT16是unsigned char short

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
3#
发表于 2013-10-8 14:12 | 只看该作者
stroul函数,我没有查到,是将字符串转成长整形吗?
: @; M' W' C( c: yuint8 a[2]; 改成 uint8 a[3] = {0};! A& X1 p. O& z1 @: J0 M! j" z
uint8 b[4]; 改成 uint8 b[5] = {0};1 v$ e4 J6 z- J. W+ I
字符串应该以0结束。

42

主题

723

帖子

2653

积分

四级会员(40)

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

积分
2653
4#
 楼主| 发表于 2013-10-9 09:13 | 只看该作者
ArthurGXH 发表于 2013-10-8 14:12
6 E- i. C& x, U* Q- pstroul函数,我没有查到,是将字符串转成长整形吗?
: {! P9 v6 D3 v( ~uint8 a[2]; 改成 uint8 a[3] = {0};
7 o  M. n8 _6 w2 Z" n, k5 \. quint8 b[4]; 改 ...
# m- W( [" p; X! ?0 \; B2 ?! b  k5 x
还是一样错误,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  ?! p: M" V  G& V( G
把stroul函数贴出来吧,调试程序最好用断点查看变量的值,而不是用printf函数。
! |) s& j4 A5 n4 H4 S$ H
这是库函数,转换数据类型的,你百科下就知道了

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
7#
发表于 2013-10-10 14:32 | 只看该作者
本帖最后由 ArthurGXH 于 2013-10-10 14:36 编辑 5 n4 X2 L% C3 I% f5 N3 y

5 D) B0 U, a$ d' K楼主的函数写错了,应该是strtol。
% S; v4 c6 m2 E' ]/ O9 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
; W9 B; {# U" t5 v8 w$ k楼主的函数写错了,应该是strtol。7 ^$ E8 d2 w1 _/ W3 V+ m
楼主仔细看我在3楼的回帖,数组a、b的长度都增加了1,且加了“={0}” ...
2 [5 f' H- q6 b$ H

- i! @5 S, |8 ?1 f1 ^ab长度是增加了,因为我存放字符,这个貌似对我这个没多大影响吧?求解; a" S) ?, g* j5 ^. \8 R
$ L6 B! F% T4 Z; k; d. t3 C7 W0 k
恩,查了下:
7 G4 U2 M- O$ M9 e) Cstrtoul(将字符串转换成无符号长整型数)& R4 c. i' L8 J) `) f  _
strtol    (将参数nptr字符串根据参数base来转换成长整型数)% d2 A0 B9 K9 a/ n9 ~
1 `0 v5 v/ _! y0 Q; R
功能差不多,上面是转换成无符号整形,故有个u
$ o. ?5 N0 ~$ I$ g9 m8 `! F; B( z9 }% G: p" D, N
2 U& b- B& R, ]4 K8 S; [- k
  c1 |* f$ O) o7 v+ c0 ^

, T* F. R+ H+ j8 w3 p# r# p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-19 09:57 , Processed in 0.058197 second(s), 31 queries , Gzip On.

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

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

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