/******************************************************************************************************
* @file name: :Simulation(malloc)
* @brief :模擬獲取資料,把首地址返回
* @author :wvjnuhhail@126.com
* @date :2024/06/24
* @version 1.0 :V1.0
* @property :暫無
* @note :None
* CopyRight (c) 2023-2024 wvjnuhhail@126.com All Right Reseverd
******************************************************************************************************/
/***********************************************標頭檔案******************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**********************************************END*******************************************************/
/*
* 使用malloc申請30個位元組,模擬報文傳輸
* 用這個30位元組的空間來存放報文資料,報文資料:前4個位元組存放正文段的位元組大小,
* 接下來的9個位元組存放傳送者的名字(旦丁),剩餘的空間存放(hello Dante)正文
*
*/
/***********************************宏定義***************************************************************/
#define MESSAGE_LEN 30
#define TEXT_SIZE_POS 0
#define SENDER_POS 5
#define TEXT_POS 12
/***********************************END*****************************************************************/
/********************************************************************************************************
* @function_name : Get_Message_Data
* @brief : 模擬獲取資料
* @param : NONE
* @retval : void
* @date :2024/06/24
* @version :V1.0
* @note :None
*******************************************************************************************************/
char *Get_Message_Data()
{
char *message_data_p = (char *)malloc(sizeof(char) * MESSAGE_LEN);
if (message_data_p == (char *)NULL)
{
printf("申請存放報文資料堆空間失敗!\n");
return (char *)NULL;
}
memset(message_data_p, 0, sizeof(char) * MESSAGE_LEN);
// 在前4個位元組中存放資料的大小 11
char Name[] = "但丁";
char text[] = "hello dante";
int text_len = strlen(text);
memcpy(message_data_p + TEXT_SIZE_POS, &text_len, sizeof(int));
memcpy(message_data_p + SENDER_POS, Name, strlen(Name));
memcpy(message_data_p + TEXT_POS, text, text_len);
return message_data_p;
}
int main()
{
char *message_data_p = Get_Message_Data();
if (message_data_p == (char *)NULL)
{
perror("獲取報文資料失敗!\n");
exit(1);
}
printf("獲取報文資料成功,如下:\n");
printf("[data size: %d byte]\n", *((int *)message_data_p + TEXT_SIZE_POS));
printf("[Sender: %s]\n", message_data_p + SENDER_POS);
printf("[message data 資料正文: %s]\n", message_data_p + TEXT_POS);
free(message_data_p);
return 0;
}