繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM