[转帖]为什么当我尝试在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