NAZWA

memcpy - kopiuje obszar pamięci

BIBLIOTEKA

Standardowa biblioteka C ( libc, -lc)

SKŁADNIA

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

OPIS

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).

WARTOŚĆ ZWRACANA

Funkcja memcpy() zwraca wskaźnik do dest.

ATRYBUTY

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
 

STANDARDY

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

UWAGI

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)).

ZOBACZ TAKŻE

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

TŁUMACZENIE

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Jarosław Beczek <[email protected]>, Andrzej Krzysztofowicz <[email protected]>, Robert Luberda <[email protected]> i Michał Kułach <[email protected]>
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 [email protected]

Recommended readings

Pages related to memcpy you should read also: