首页 > 解决方案 > 从字符串读取大小后分配大小为“n”的缓冲区

问题描述

我正在研究USB通信。这里每次来自主机的数据大小都不同。为避免主机出现这种情况,它将在发送数据之前发送数据大小,因此我需要分配主机发送大小的缓冲区。

来自主机的数据是“5”,它是一个字符串,我需要分配一个大小为 5 的缓冲区。例如:rec_buff [5]。从主机读取大小后。

每次大小变化时,我如何使用 C 代码片段来做到这一点。我不知道该怎么做。我曾经在java上工作,我是C的新手。

我需要在不使用动态内存分配的情况下做到这一点。

任何帮助将不胜感激。在此先感谢。

标签: cstringbufferallocation

解决方案


我假设您不希望使用可变大小的块分配内存,因为您不希望内存碎片。那么您正在寻找的是一个内存池(固定块大小)或一个固定大小的数组(在.bss部分中预分配的数组)。

您可以查看Zephyr RTOS 中的内存池 API 的外观,并检查源代码以了解实现细节。还有关于实现自己的内存池的问题

该系统的一个重要方面是处理当输入超过缓冲区中的最大可用空间时发生的情况。例如,您可以实现某种状态机并以块的形式解析输入或简单地中止。


推荐阅读