Как я могу скопировать повторяющийся шаблон в буфер памяти?

Я хочу записать повторяющийся шаблон байтов в блок памяти. Моя идея - написать первый пример паттерна, а затем скопировать его в остальную часть буфера. Например, если я начну со следующего:

ptr: 123400000000

После этого я хочу, чтобы это выглядело так:

ptr: 123412341234

Я думал, что могу использовать memcpy для записи в пересекающиеся области, например:

memcpy(ptr + 4, ptr, 8);

Стандарт не определяет, в каком порядке будет происходить копирование, поэтому, если какая-то реализация заставляет копировать в обратном порядке, это может дать разные результаты:

ptr: 123412340000

или даже комбинированные.

Есть ли обходной путь, позволяющий мне по-прежнему использовать memcpy , или мне нужно реализовать собственный цикл for? Обратите внимание, что я не могу использовать memmove , потому что он делает именно то, чего я пытаюсь избежать; он делает ptr 123412340000 , а я хочу 123412341234 .

Я программирую для Mac / iPhone (компилятор clang), но общий ответ тоже будет хорош.

6
задан Rob Kennedy 12 June 2011 в 23:46
поделиться