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