Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Копирование элементов из одного массива в другой
Для копирования элементов из одного массива в другой используются следующие функции:
memcpy()
— копирует первыеsize
байтов из массиваsrc
в массивdst
. В качестве значения функция возвращает указатель на массивdst
. Если массивsrc
длиннее массиваdst
, то произойдет переполнение буфера. Если указатели пересекаются, то поведение функции непредсказуемо. Прототип функции:
#include <cstring> /* или #include <string.h>
или #include <memory.h> */
void *memcpy(void *dst, const void *src, size_t size);
Пример использования функции:
const int ARR1_SIZE = 5, ARR2_SIZE = 3;
int arr1[ARR1_SIZE] = {0}, arr2[ARR2_SIZE] = {1, 2, 3};
int *p = nullptr, i = 0;
// Копируем все элементы массива arr2
p = (int *)std::memcpy(arr1, arr2, sizeof arr2);
for (i = 0; i < ARR1_SIZE; ++i) {
std::cout << arr1[i] << " ";
} // 1 2 3 0 0
std::cout << std::endl;
if (!p) exit(1);
// Перемещаем указатель на четвертый элемент массива
p += 3;
// Копируем только два первых элемента массива arr2
std::memcpy(p, arr2, 2 * sizeof(int));
for (i = 0; i < ARR1_SIZE; ++i) {
std::cout << arr1[i] << " ";
} // 1 2 3 1 2
std::cout << std::endl;
Вместо функции memcpy()
лучше использовать функцию memcpy_s()
. Прототип функции:
#include <cstring> /* или #include <string.h>
или #include <memory.h> */
errno_t memcpy_s(void *dst, size_t dstSize, const void *src,
size_t maxCount);
Функция memcpy_s()
копирует первые maxCount
байтов из массива src
в массив dst
. В параметре dstSize
указывается размер массива dst
в байтах. Если копирование прошло успешно функция возвращает значение 0
. Пример:
const int ARR1_SIZE = 5, ARR2_SIZE = 3;
int arr1[ARR1_SIZE] = {0}, arr2[ARR2_SIZE] = {1, 2, 3};
// Копируем только два первых элемента массива arr2
memcpy_s(arr1, sizeof arr1, arr2, 2 * sizeof(int));
for (int i = 0; i < ARR1_SIZE; ++i) {
std::cout << arr1[i] << " ";
} // 1 2 0 0 0
std::cout << std::endl;
memmove()
— копирует первыеsize
байтов из массиваsrc
в массивdst
. В качестве значения функция возвращает указатель на массивdst
. Если массивsrc
длиннее массиваdst
, то произойдет переполнение буфера. Основное отличие функцииmemmove()
отmemcpy()
в выполнении корректных действий при пересечении указателей. Прототип функции:
#include <cstring> /* или #include <string.h> */
void *memmove(void *dst, const void *src, size_t size);
Пример:
const int ARR_SIZE = 5;
int arr[ARR_SIZE] = {1, 2, 3, 4, 5}, *p = nullptr;
p = arr + 2;
// Указатели пересекаются
std::memmove(p, arr, 3 * sizeof(int));
for (int i = 0; i < ARR_SIZE; ++i) {
std::cout << arr[i] << ' ';
} // 1 2 1 2 3 - копирование произведено корректно
std::cout << std::endl;
Вместо функции memmove()
лучше использовать функцию memmove_s()
. Прототип функции:
#include <cstring> /* или #include <string.h> */
errno_t memmove_s(void *dst, size_t dstSize, const void *src,
size_t maxCount);
Функция memmove_s()
копирует первые maxCount
байтов из массива src
в массив dst
. В параметре dstSize
указывается размер массива dst
в байтах. Если копирование прошло успешно функция возвращает значение 0
. Пример:
const int ARR_SIZE = 5;
int arr[ARR_SIZE] = {1, 2, 3, 4, 5}, *p = nullptr;
p = arr + 2;
memmove_s(p, sizeof arr, arr, 3 * sizeof(int));
for (int i = 0; i < ARR_SIZE; ++i) {
std::cout << arr[i] << ' ';
} // 1 2 1 2 3
std::cout << std::endl;
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов