不同数组之间的 memcpy 或 memmove
memcpy or memmove between different arrays
我正在阅读有关 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);
?当然,假设我们有足够的 space.
如果不是,正确的做法是什么?这可以用 memcpy 完成吗?
谢谢。
编辑:我想我需要补充一点,这对我的程序不起作用。它没有崩溃,但似乎什么也没做。
好的,我发现了我的错误。
是的,你可以用 memmove 做到这一点,但我错过了一些东西:
void concatenateList(List* listToConcatenate)
{
memmove(this->vector + n, listToConcatenate->vector, (listToConcatenate->n)*sizeof(int));
this->n += listToConcatenate->n; //Mistake here.
};
这就是它没有打印任何东西的原因。但是,是的,我现在更清楚了。谢谢大家的回答。
我正在阅读有关 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);
?当然,假设我们有足够的 space.
如果不是,正确的做法是什么?这可以用 memcpy 完成吗?
谢谢。
编辑:我想我需要补充一点,这对我的程序不起作用。它没有崩溃,但似乎什么也没做。
好的,我发现了我的错误。
是的,你可以用 memmove 做到这一点,但我错过了一些东西:
void concatenateList(List* listToConcatenate)
{
memmove(this->vector + n, listToConcatenate->vector, (listToConcatenate->n)*sizeof(int));
this->n += listToConcatenate->n; //Mistake here.
};
这就是它没有打印任何东西的原因。但是,是的,我现在更清楚了。谢谢大家的回答。