[英]How to type cast a struct into allocated char memory space
我正在尝试使用堆上一段内存的前几个字节来使用 C 语言(而不是 C++)存储有关该段内存的元数据。
堆空间是使用以下方法创建的:
char* start_mem = (char*)malloc(10*sizeof(char)); //10 bytes of memory
现在,我试图在分配的堆空间的前 4 个字节中放置一个“元”结构。
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;
主要问题是如何将“元”数据类型(4 个字节)放入 start_mem 开头的四个字符大小(1 个字节)的空间中?
仅供参考 - 这是数据结构类中较大项目的一小部分。 话虽如此,不用回答“你为什么还要做这个?” 或者“你可以只使用 function_abc() 并做同样的事情。” 已经设置了限制(即一次使用 malloc() ),我想遵循它们。
您可以使用memcpy :
#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);
请注意,您必须注意字节顺序 。
更简单的是,做一个类型转换的任务:
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int test;
} meta_t;
int main() {
char *start_mem = malloc(10);
meta_t meta;
meta_t *p;
meta.test = 123;
p = (meta_t *) start_mem;
*p = meta;
printf("Saved: %d\n", ((meta_t *)(start_mem))->test);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.