标签: offsetof

如何使用“ offsetof”在不同结构之间执行“ memcpy”?

我有以下两个结构。我需要从复制d, e, fsource,然后destination使用memcpyoffsetof。我怎样才能做到这一点?

struct source
{
    int a;
    int b;
    int c;
    int d;
    int e;
    int f;
};

struct destination
{
    int d;
    int e;
    int f;
};
Run Code Online (Sandbox Code Playgroud)

c offsetof memcpy

1
推荐指数
1
解决办法
1742
查看次数

C++中嵌套C结构的offsetof()

我正在尝试在C++(Linux)中为我的一个套接字添加套接字过滤器.在套接字过滤器中,我需要获取struct fork_proc_event的偏移量,它嵌套在另一个结构中.定义看起来像这样(cn_proc.h):

struct proc_event {
    ...
    union {
        ...
        struct fork_proc_event {
            __kernel_pid_t parent_pid;
            ...
        } fork;
        ...
    } event_data;
    ...
};

在CI中会这样做:

int off = offsetof(struct fork_proc_event, parent_pid);

但是我正在用C++开发.如果我尝试这样做:

int off = offsetof(proc_event::fork_proc_event, parent_pid);

我收到以下错误:

error: expected type-specifier
error: expected `,'
error: expected `)' before ',' token

offsetof()行应该如何?

c c++ sockets struct offsetof

1
推荐指数
1
解决办法
2531
查看次数

反转指向成员的指针(即获取包含结构的地址)

我有一个struct(Member),它只能用作其他struct(Container)中的数据成员.按照惯例,成员的名字总是m.成员是否有可靠的方法来获取包含结构的地址?

template<typename Struct>
struct Member;
{
  const Struct& s = ??;
                    // this - &Struct::m
};

struct Container
{
   Member<Container> m;
};
Run Code Online (Sandbox Code Playgroud)

我希望可能使用指向成员的指针&Container::m可能有助于从Member对象本身的地址计算回来?

c++ offsetof pointer-to-member c++11

1
推荐指数
1
解决办法
190
查看次数

使用 memcpy 和 offsetof 复制结构的一部分

我想通过组合offsetof宏和memcpy,从某个元素开始向前复制结构的一部分,如下所示:

#include <stdio.h>
#include <string.h>
#include <stddef.h>

struct test {

  int x, y, z;
};

int main() {

  struct test a = { 1, 2, 3 };
  struct test b = { 4, 5, 6 };

  const size_t yOffset = offsetof(struct test, y);

  memcpy(&b + yOffset, &a + yOffset, sizeof(struct test) - yOffset);

  printf("%d ", b.x);
  printf("%d ", b.y);
  printf("%d", b.z);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望这会输出,4 2 3但它实际上输出4 5 6好像没有发生复制一样。我做错了什么?

c offsetof memcpy

0
推荐指数
1
解决办法
91
查看次数

标签 统计

offsetof ×4

c ×3

c++ ×2

memcpy ×2

c++11 ×1

pointer-to-member ×1

sockets ×1

struct ×1