【问题标题】:memcpy or memmove between different arrays不同数组之间的 memcpy 或 memmove
【发布时间】:2016-06-24 03:36:18
【问题描述】:

我正在阅读有关 memcpy 和 memmove 的一些信息,如果我没记错的话,您可以将两者用于在不同数组之间移动内存。

所以这是我的问题:如果我想用这个方法连接这些对象。

class List
{
    // Pointer to the beginning.
    int* vector;

    // Number of elements, n >= 0
    int n;

    // Capacity for new elements.
    int capacity;
}

void concatenateList(List* listToConcatenate)
{    
    memmove(this->vector + n, listToConcatenate->vector, (listToConcatenate->n)*sizeof(int));
}

因此,从"listToConcatenate->vector" 开始,我们将使用"(listToConcatenate->n)*sizeof(int))" 复制其中的所有元素,并将其放在另一个数组"this->vector + n" 的末尾。

这不应该是正确的list2.listToConcatenate(&list1);吗?当然,假设我们有足够的空间。

如果不是,那么正确的方法是什么?这可以用 memcpy 完成吗?

谢谢。

编辑:我想我需要补充一点,这不适用于我的程序。它不会崩溃,但似乎什么也没做。

【问题讨论】:

  • 将列表与自身连接是否有效?
  • 嗯...是的,为什么?
  • @DavidSchwartz 没关系,即使listToConcatenate == this:没有内存重叠。
  • 你可以使用::memcpy()
  • 您可以将数组的一部分 memcpy 到同一数组的另一部分,只要源范围和目标范围不重叠。

标签: c++ arrays concatenation memcpy memmove


【解决方案1】:

好的,我发现我的错误了。

是的,你可以用 memmove 做到这一点,但我错过了一些东西:

void concatenateList(List* listToConcatenate)
{    
    memmove(this->vector + n, listToConcatenate->vector, (listToConcatenate->n)*sizeof(int));
    this->n += listToConcatenate->n; //Mistake here.
};

这就是它没有打印任何东西的原因。但是,是的,我现在对 memmove 有了更清晰的了解。谢谢大家的回答。

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 2016-06-09
    • 2011-04-17
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    相关资源
    最近更新 更多