C语言变长消息定义:柔性数组

来源:本站
导读:目前正在解读《C语言变长消息定义:柔性数组》的相关信息,《C语言变长消息定义:柔性数组》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言变长消息定义:柔性数组》的详细说明。
简介:本文主要介绍C语言中柔性数组问题,感性趣的朋友可以看看。

在游戏前后端交换的过程中,经常会用到变长的消息体,因为有的内容的大小是未知的,例如一条微博,微博的内容大小是未知的。

一般的做法是定义一个char*类型的指针,然后指定其长度,代码如下:

typedef struct{

unsigned len;

char* pData;

}Msg;

使用的时候是这样的:

char str[] = "hello world!";

unsigned len = sizeof(str);

Msg* m = (Msg*)malloc(sizeof(Msg)+len*sizeof(char));

m->len = len;

m->pData = (char*)(m+1);

memcpy(m+1, str, len);

printf("%d, %sn", m->len, m->pData);

有没有觉得时机上char* pData很多余呢?

因为数据时机的存储位置在m+1,我们可以直接得到这个指针,而不需要重新定义一个char* pData来报错这个位置。

这样带来了另一个问题就是,访问不方便,我们不能用结构体成员的方式来访问了,可以使用柔性数组,且看:

typedef struct{

unsigned len;

char data[];

}Message;

使用起来就是这样的:

Message* msg = (Message*)malloc(sizeof(Message) + len*sizeof(char));

msg->len = len;

memcpy(msg->data, str, len);

printf("%d, %sn", msg->len, msg->data);

free(msg);

来分完整代码对比下:

// array0.h

typedef struct{

unsigned len;

char* pData;

}Msg;

typedef struct{

unsigned len;

char data[];

}Message;

// main.c

// test for 0 size array

#include

#include

#include

#include "array0.h"

int main()

{

char str[] = "hello world!";

unsigned len = sizeof(str);

// 普通用法

Msg* m = (Msg*)malloc(sizeof(Msg)+len*sizeof(char));

m->len = len;

m->pData = (char*)(m+1);

memcpy(m+1, str, len);

printf("%d, %sn", m->len, m->pData);

free(m);

// 柔性数组

Message* msg = (Message*)malloc(sizeof(Message) + len*sizeof(char));

msg->len = len;

memcpy(msg->data, str, len);

printf("%d, %sn", msg->len, msg->data);

free(msg);

system("pause");

return 0;

}

提醒:《C语言变长消息定义:柔性数组》最后刷新时间 2024-03-14 00:59:11,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言变长消息定义:柔性数组》该内容的真实性请自行鉴别。