导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[转帖]为什么当我尝试在xC中字符串拷贝一部分a struc

* 108110: [转帖]为什么当我尝试在xC中字符串拷贝一部分a struct会得到一个异常?

   liufengzhong 
liufengzhong发表的帖子 

 [转帖]为什么当我尝试在xC中字符串拷贝一部分a struct会得到一个异常?
我已经得到一个struct像这个:


struct st {
int a;
int b;
int c; } x;


如果我接下来做;

memcpy(dst, (char *) &x.b, 8); 

在运行时得到一个异常:

Unhandled exception: ECALL, data: 0x00000000

为什么会这样?


回答:

唯一的例外是由于在XC的安全的指针的边界检查。

在xC,如果你把一个安全指针带到一个结构成员,然后那指针的边界只允许你存取那些成员。

如果你想要操作结构的内存,你必须把一个指针带到整个节后——不仅仅是一个成员。例如:

   struct st x;
   char * p = &x;


在上面的例子,你想要做些事情像:

    memcpy(dst, ((char *) &x) + 4, 8)
;

当然,此代码意味着你知道如何在内存中的布局结构。这是一个有用的宏:

   #define struct_offset(s, x) ((char *) &s.x - (char *) &s)

这意味着你能写:

   memcpy(dst, ((char *) &x) + struct_offset(x, b), 8);

此代码是更明确的,它要把结构作为存储字符块。


发表时间:2014年8月6日17:50:32

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:[转帖]我们怎样才能查看程序的汇编代码?我们怎样才能查看程序的汇编代码? /P P 回
[下一篇帖子]:[转帖]如何为 XC - 2以太网kit?hello, /P P