我有一个巨大的缓冲区,我需要向其中写入字符串和整数。
我知道你可以使用 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/