c - 在C中将一个数组中的项目附加到另一个数组的末尾

标签 c arrays dynamic-arrays

如果我有两个数组

unsigned char buffer[80];
unsigned char data[3]

// data array will always hold hex values
data[] = {0x00, 0xEB, 0xFF}

如果我想通过将 data[] 的元素(始终是十六进制值)附加到缓冲区数组的末尾来不断更新缓冲区数组,那么最好的方法是什么,因为我知道最大大小是多少缓冲区数组可以是?另外,如果我不知道缓冲区数组的最大大小是多少并且在添加时需要更新它,那么需要更改什么?

谢谢!

最佳答案

只需跟踪 buffer 数组中已有的字节数即可。它从零开始,对于您附加的每个字节,该计数器都会增加一。这意味着您不仅知道数组中的字节数,而且计数器也是要添加到的下一个位置。

因此,如果计数器为零,则设置 buffer[0] 并将计数器增加到 1。然后,要附加下一个字节,请设置 buffer[1] 并将计数器增加到 2,等等

<小时/>

要在循环中不断追加 data 数组,请使用 memcpy 并按 data 中的项目数增加计数器:

size_t count = 0;  /* Counter starts out at zero */

/* Append the `data` array five times */
for (size_t i = 0; i < 5; ++i)
{
    /* Use of `sizeof` here assumes that `data` is a proper array and not a pointer */
    memcpy(&buffer[count], data, sizeof(data));

    /* Increase counter */
    count += sizeof(data);
}

注意:代码假定 bufferdata 都是 char(或其他 8 位类型)数组。

还要注意不要写入超出缓冲区的范围。

关于c - 在C中将一个数组中的项目附加到另一个数组的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22152195/

相关文章:

c - cygwin 上的内存泄漏工具

javascript - 无法删除该值并取消选中复选框的项目?

c - bsearch 在 C 中使用动态数组

c - 如何在C中创建一个随机二维数组,其值仅重复两次

c - 如何将 skb 推送到 Linux 网络堆栈的特定点?

检查点是在圆内还是在圆外(仅使用结构体实现)

计数排序不对最后一个元素进行排序 C

arrays - 如何检查a(字符串)是否等于a(数组内的字符串)?我可以用 If 语句检查它吗?

arrays - 修改解析的 CSV 文件输出,很快吗?

c++ - DynamicArray of struct - 添加元素而不创建结构变量/对象