c - 从字符串读取大小后分配大小为 'n' 的缓冲区

标签 c string buffer allocation

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

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

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

我需要在不使用动态内存分配的情况下完成此操作。

任何帮助将不胜感激。提前致谢。

最佳答案

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

您可以看看 API for memory pool in Zephyr RTOS 是如何实现的看起来像并检查源代码以获取实现细节。还有question about implementing own memory pool .

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

关于c - 从字符串读取大小后分配大小为 'n' 的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54020172/

相关文章:

c - 8 位 MCU 中的 32 位变量移位

android - 以编程方式在android中读取framebuffer/dev/graphics/fb0

结构成员对齐困惑

c - 程序集 64 位无效有效地址

php - PHP 为每个数组元素赋值

java - 计算字符串的所有排列(破解编码面试,第六章 - 示例 12)

c++ - Boost Buffer 问题 String

Java - 是否可以逐行读取文件,停止,然后立即开始读取我停止的地方的字节?

c - 如何强制将int的大小用于调试目的?

java - 为什么有些字符串没有从 java 插入到 PostgreSQL 表中?