如果我有两个数组
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);
}
注意:代码假定 buffer
和 data
都是 char
(或其他 8 位类型)数组。
还要注意不要写入超出缓冲区
的范围。
关于c - 在C中将一个数组中的项目附加到另一个数组的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22152195/