如何在不使用while循环的情况下找到缓冲区的大小?

问题描述 投票:-1回答:1

我最近试图在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:我不允许将其大小作为单独的参数传递。

c++ pointers buffer memcpy
1个回答
0
投票

无法解决您的问题。您要求的是矢量,但矢量仅知道其大小,因为它们会存储它们。由于似乎不允许您更改函数的签名,因此循环是您唯一的选择。无论如何,这对我来说似乎并不是效率低下。

您的代码确实存在错误,在计算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; 
}
© www.soinside.com 2019 - 2024. All rights reserved.