访问带偏移量的嵌套结构
Access nested struct with offset
我想使用结构偏移来访问结构的嵌套元素,但以下测试程序没有正确复制字符串。我该如何修复这个片段(它崩溃了)。它似乎没有跳转到嵌套结构。
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <string.h>
typedef struct {
char a;
int b;
char c[10];
char d[10];
}foo_t;
typedef struct {
foo_t foo;
}super_foo_t;
super_foo_t test;
int main() {
memcpy(&(test.foo) + offsetof(foo_t, c), "hello", sizeof("hello"));
printf("c should be hello:%s\n", test.foo.c);
return 0;
}
您正在偏移 "foo_t" 指针,因此它将等同于 &test.foo[offsetof(foo_t, c)] 因为“&test.foo”是"foo_t*"...
您需要告诉编译器偏移量以字节为单位,具体如下所示:
memcpy((char*)(&(test.foo)) + offsetof(foo_t, c), "hello", sizeof("hello"));
因为 offset of 给出了以字节为单位的偏移量,您需要使用字节偏移量进行计算。所以如果你需要访问成员 "b" 你应该像下面这样写:
int * ptrB = (int*) ((char*)(&(test.foo)) + offsetof(foo_t, b));
*ptrB = 15;
我们在下面做的是,我们首先将指针转换为字节,以便编译器将偏移量计算为字节,然后我们可以 return 返回原始指针类型。
我想使用结构偏移来访问结构的嵌套元素,但以下测试程序没有正确复制字符串。我该如何修复这个片段(它崩溃了)。它似乎没有跳转到嵌套结构。
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <string.h>
typedef struct {
char a;
int b;
char c[10];
char d[10];
}foo_t;
typedef struct {
foo_t foo;
}super_foo_t;
super_foo_t test;
int main() {
memcpy(&(test.foo) + offsetof(foo_t, c), "hello", sizeof("hello"));
printf("c should be hello:%s\n", test.foo.c);
return 0;
}
您正在偏移 "foo_t" 指针,因此它将等同于 &test.foo[offsetof(foo_t, c)] 因为“&test.foo”是"foo_t*"...
您需要告诉编译器偏移量以字节为单位,具体如下所示:
memcpy((char*)(&(test.foo)) + offsetof(foo_t, c), "hello", sizeof("hello"));
因为 offset of 给出了以字节为单位的偏移量,您需要使用字节偏移量进行计算。所以如果你需要访问成员 "b" 你应该像下面这样写:
int * ptrB = (int*) ((char*)(&(test.foo)) + offsetof(foo_t, b));
*ptrB = 15;
我们在下面做的是,我们首先将指针转换为字节,以便编译器将偏移量计算为字节,然后我们可以 return 返回原始指针类型。