簡體   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