C : memcpy 到缓冲区的 "end"

C : memcpy to the "end" of a buffer

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

我知道你可以使用 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);

这还有一个好处,您可以通过移动成对的行来重新排序字段,而无需重新编号。