我最近试图在memcpy
中找到用于使用输入缓冲区的大小,以将输入缓冲区的内容复制到输出缓冲区而不重叠。以下是代码段。
char * func(char *buff1, char *buff2, char *outbuff)
{
int size = 0;
while(*buff1 != '\0')
{
size++;
buff1++;
}
memcpy(outbuff, buff1, sizeof(char)*size);
memcpy(outbuff + size, buff2, sizeof(char)*size);
return outbuff;
}
但是,我发现这是找到尺寸的非常无效的方法。如果你们知道任何其他选择,对我会很有帮助。
Edit:我不允许将其大小作为单独的参数传递。
无法解决您的问题。您要求的是矢量,但矢量仅知道其大小,因为它们会存储它们。由于似乎不允许您更改函数的签名,因此循环是您唯一的选择。无论如何,这对我来说似乎并不是效率低下。
您的代码确实存在错误,在计算buff1
的大小时,您需要调整buff1
指针,因此在进行复制时不再指向块的开始。复制之前,您需要减去缓冲区的大小。另外,您似乎还假设两个输入缓冲区的大小相同。
这似乎是您代码的更好版本。
char* func(char *buff1, char *buff2, char *outbuff)
{
int size1 = 0;
while (*buff1 != '\0')
{
size1++;
buff1++;
}
int size2 = 0;
while (*buff2 != '\0')
{
size2++;
buff2++;
}
memcpy(outbuff, buff1 - size1, sizeof(char)*size1);
memcpy(outbuff + size1, buff2 - size2, sizeof(char)*size2);
return outbuff;
}