memcpy(3) Library Functions Manual memcpy(3)

memcpy - kopiuje obszar pamięci

Standardowa biblioteka C (libc, -lc)

#include <string.h>
void *memcpy(void dest[restrict .n], const void src[restrict .n],
             size_t n);

Funkcja memcpy() kopiuje n bajtów z obszaru pamięci src do obszaru pamięci dest. Obszary te nie mogą na siebie nachodzić. Jeżeli obszary pamięci na siebie nachodzą, należy używać memmove(3).

Funkcja memcpy() zwraca wskaźnik do dest.

Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

Interfejs Atrybut Wartość
memcpy() Bezpieczeństwo wątkowe MT-bezpieczne

C11, POSIX.1-2008.

POSIX.1-2001, C89, SVr4, 4.3BSD.

Zignorowanie wymogu nienachodzenia na siebie obszarów pamięci jest źródłem istotnych błędów (Standardy POSIX i C jednoznacznie określają, że wykorzystanie memcpy() z nachodzącymi na siebie obszarami pamięciami daje niezdefiniowane zachowanie). Co więcej, w glibc 2.13 na niektórych platformach (w tym x86-64) przeprowadzana jest optymalizacja wydajności memcpy() obejmująca zmianę kolejności kopiowania bajtów z src do dest.

Zmiana ta ujawniła poważne błędy w wielu aplikacjach przeprowadzających kopiowania na nachodzących obszarach pamięci. W poprzedniej implementacji, w której kolejność kopiowanych bajtów szczęśliwie ukrywała ten błąd, który odsłonił się po jej odwróceniu. W glibc 2.14 dodano wersjonowany symbol, dzięki czemu stare pliki binarne (zlinkowane z glibc w wersji wcześniejszej niż 2.14) korzystają z implementacji memcpy() która w sposób bezpieczny obsługuje przypadek nachodzących obszarów pamięci (udostępniając „starszą” implementację memcpy(), która była aliasem memmove(3)).

bcopy(3), bstring(3), memccpy(3), memmove(3), mempcpy(3), strcpy(3), strncpy(3), wmemcpy(3)

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Jarosław Beczek <bexx@poczta.onet.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

2 maja 2024 r. Linux man-pages 6.8