C : memcpy to the "end" of a buffer

标签 c buffer memcpy

我有一个巨大的缓冲区,我需要向其中写入字符串和整数。

我知道你可以使用 memcpy/memmove 写入它。但在这种情况下,我必须抵消每个变量。

示例:

int a = 10;
char *s = "hello world";
char buf[100];
memcpy(buf, a, 4);
memcpy(buf + 4, s, strlen(s))

如您所见,我需要将 + 4 偏移到第二个 memcpy 才能使其工作。

我有很多变量。我不想抵消它们中的每一个。可以这样做吗?

PS:缓冲区的大小恰好是所有变量之和的大小

最佳答案

您可以将当前偏移量保留在单独的变量中,并为复制的每个值增加它。

int a = 10;
char *s = "hello world";

char buf[100];
int offset = 0;

memcpy(buf + offset, &a, sizeof(a));
offset += sizeof(a);
memcpy(buf + offset, s, strlen(s))
offset += strlen(s);

这还有一个优点,您可以通过移动成对的行来重新排序字段,而无需重新编号任何内容。

关于C : memcpy to the "end" of a buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70163442/

相关文章:

c++ - 字节缓冲区应该是有符号缓冲区还是无符号字符缓冲区?

c++ - 是否在C++标准中定义了memcpy(dest,src,0)?

c++ - 理解 memcpy

c - 具有优先级的动态队列,添加功能不起作用

c - 如何连接两个 Lua lua L_Buffer 对象?

c - 如何修复选择排序交换访问冲突

Python:使用 ctypes 从缓冲区中提取数据

c++ - C++ 中 32 位到 unit64 的转换

c - 具有宏的类型安全的通用容器

c - C 中的返回值