C 如何将结构类型强制转换为分配的字符内存空间

C 如何将结构类型强制转换为分配的字符内存空间,c,struct,casting,malloc,heap,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 #includ

我正在尝试使用堆上内存部分的前几个字节来使用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;
}
但这种类型的演员没有

meta_t meta;
meta.test = 123;
char c = (char) meta;
主要问题是如何将“meta”数据类型(4字节)放入start_mem开头的四个字符大小(1字节)的空间中

仅供参考-这是数据结构类中较大项目的一小部分。已经说过,没有必要回答“你为什么要这么做?”或“你可以使用函数_abc()做同样的事情。”已经设置了限制(即一次使用malloc()),我想遵循这些限制。

你可以使用:

#包括
#包括
#包括
类型定义结构{
智力测验;
}元分析;
int main(){
char*start_mem=malloc(10);
meta_t meta;
meta.test=123;
memcpy(start_mem,&meta,sizeof(meta));
printf(“已保存:%d\n”,((meta_t*)(start_mem))->test);
返回0;
}
这个怎么样

memcpy(start_mem, &meta, sizeof meta);

请注意,您必须注意endianness

,因此问题只是:如何将“meta”数据类型(4字节)调整为4个字符大小(1字节)?请注意
malloc(10*sizeof(char))
可以替换为
malloc(10)
,但您可能希望保留
*sizeof(char)
出于可理解的原因。谢谢Ian Abbott。整数与内存结构不同。整数和字符都用数字表示。然而,结构并非如此。另一方面,如果您需要复制内存,请使用memcpy函数。@Mason-谢谢您的解释。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
    int test;
} meta_t;

int main() {

    char *start_mem = malloc(10);

    meta_t meta;
    meta.test = 123;

    memcpy(start_mem, &meta, sizeof(meta));

    printf("Saved: %d\n", ((meta_t *)(start_mem))->test);

    return 0;
}
memcpy(start_mem, &meta, sizeof meta);