如何将结构转换为已分配的char内存空间

时间:2016-03-31 15:25:05

标签: c struct casting malloc heap

我正在尝试使用堆上一段内存的前几个字节来存储使用C语言(而不是C ++)的段内存的元数据。

使用以下命令创建堆空间:

char* start_mem = (char*)malloc(10*sizeof(char)); //10 bytes of memory

现在,我正在尝试在分配的堆空间的前4个字节中放置一个'meta'结构。

typedef struct{
    int test;
}meta_t;

这是一个测试代码,用于在更大的代码中实现之前了解如何操作。

test #include <stdio.h>

typedef struct{
    int test;
} meta_t;

int main(void) {

    char* start_mem = (char*)malloc(10*sizeof(char));

    meta_t meta;
    meta.test = 123;

    return 0;
}

旁注:为什么这种类型的演员有效:

int test = 123;
char c = (char) test;

但是这种类型的演员没有?:

meta_t meta;
meta.test = 123;
char c = (char) meta;

主要问题是如何在start_mem的开头将'meta'数据类型(4个字节)放入四个char大小(1个字节)的空格中?

仅供参考 - 这是数据结构类中较大项目的一小部分。话虽如此,没有必要回答“你为什么还要费心去做?”或者“你可以使用function_abc()并做同样的事情。”已经设置了限制(即单次使用malloc()),我想跟随它们。

2 个答案:

答案 0 :(得分:0)

您可以使用memcpy

Runnable

答案 1 :(得分:0)

这个怎么样?

{{1}}

请注意,您必须注意 endianness