РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1226 of 1245 menu

Функция copy_nonoverlapping

Функция copy_nonoverlapping из модуля std::ptr копирует count элементов типа T из области памяти, на которую указывает src, в область памяти, на которую указывает dst. Функция является небезопасной (unsafe), потому что работает с сырыми указателями и не проверяет корректность адресов. Параметром функция принимает указатель назначения dst, указатель источника src и количество копируемых элементов count. Области памяти не должны пересекаться, иначе поведение не определено - для пересекающихся областей используйте copy.

Синтаксис

unsafe fn copy_nonoverlapping<T>(src: *const T, dst: *mut T, count: usize)

Пример

Давайте скопируем массив чисел из одного места в другое:

fn main() { let src = [1, 2, 3, 4, 5]; let mut dst = [0; 5]; unsafe { std::ptr::copy_nonoverlapping( src.as_ptr(), dst.as_mut_ptr(), 5 ); } println!("{:?}", dst); }

Результат выполнения кода:

[1, 2, 3, 4, 5]

Пример

Давайте скопируем только часть элементов массива:

fn main() { let src = [1, 2, 3, 4, 5]; let mut dst = [0; 5]; unsafe { std::ptr::copy_nonoverlapping( src.as_ptr(), dst.as_mut_ptr(), 3 ); } println!("{:?}", dst); }

Результат выполнения кода:

[1, 2, 3, 0, 0]

Пример

Давайте скопируем строковые данные из вектора в буфер:

fn main() { let src = vec![b'a', b'b', b'c', b'd', b'e']; let mut dst = vec![0u8; 5]; unsafe { std::ptr::copy_nonoverlapping( src.as_ptr(), dst.as_mut_ptr(), src.len() ); } let res = String::from_utf8(dst).unwrap(); println!("{}", res); }

Результат выполнения кода:

"abcde"

Смотрите также

  • функция copy,
    которая копирует данные между пересекающимися областями памяти
  • функция read,
    которая читает значение из указателя без его перемещения
  • функция write,
    которая записывает значение по указателю без чтения старого
  • тип const-pointer,
    который представляет сырой неизменяемый указатель
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить