DOKK / manpages / debian 10 / manpages-pl-dev / memcpy.3.pl
MEMCPY(3) Podręcznik programisty Linuksa MEMCPY(3)

memcpy - kopiuje obszar pamięci

#include <string.h>

void *memcpy(void *dest, const void *src, 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-Safe

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

Zignorowanie wymogu nienachodzenia na siebie obszarów pamięci jest źródłem prawdziwych 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), memccpy(3), memmove(3), mempcpy(3), strcpy(3), strncpy(3), wmemcpy(3)

Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

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

Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 4.07 oryginału.

2015-07-23