C语言定义定长整型数组,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, %s\n", 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, %s\n", 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, %s\n", 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, %s\n", msg->len, msg->data);

free(msg);

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我不太清楚定义定长数组的具体方法,但是可以提供一些示例:在C语言中,可以使用指针数组定义定长数组,其中指针数组的每个元素都是一个指针,这些指针指向不同长度的数组。另外,还可以使用变长数组定义定长数组变长数组的长度可以在运行时动态改变。 ### 回答2: 在C语言中,可以使用指针和动态内存分配来定义一个不定长(可变长度)的数组。具体步骤如下: 1. 首先,定义一个指针变量,用于存储数组的首地址。例如:int* arr = NULL; 2. 然后,通过动态内存分配函数malloc()来为数组分配所需的内存空间。例如:arr = (int*)malloc(size * sizeof(int)); 这里的size是根据需要定义数组长度,可以通过用户输入或其他逻辑来获取。 3. 分配完内存后,就可以使用arr指针来访问该数组了,而且该数组的长度是可变的。 例如,可以通过arr[index]来访问第index个元素,其中index的范围是从0到size-1。 4. 最后,在程序结束时,需要释放动态分配的内存空间,以防止内存泄漏。使用free()函数来释放内存,例如:free(arr); 综上所述,通过指针和动态内存分配,我们可以定义一个不定长数组,在程序运行过程中根据需要动态分配和释放内存,实现数组长度的动态变化。 ### 回答3: 在C语言中,要定义一个不定长数组,可以使用动态内存分配来实现。 动态内存分配是通过C语言提供的malloc函数来实现的。它可以在运行时根据需要动态地分配内存。配合使用sizeof操作符来确定所需的内存大小,可以创建一个不定长数组。 具体步骤如下: 1. 首先,我们需要声明一个指针变量来表示数组,例如: ```c int *array; ``` 2. 然后,使用malloc函数来为数组分配所需的内存空间: ```c array = (int*)malloc(n * sizeof(int)); ``` 这里的n表示数组的长度,所需的内存大小为n个int类型的变量。 3. 现在,我们可以使用该数组进行操作,例如给数组元素赋值: ```c array[0] = 10; array[1] = 20; ``` 注意,在使用完数组后,需要使用free函数释放分配的内存,以避免内存泄漏: ```c free(array); ``` 通过以上步骤,我们成功定义了一个不定长数组。这种动态内存分配的方法可以在程序运行时根据需要创建数组,使得程序更加灵活和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值