Provided by: manpages-pl-dev_4.13-4_all bug

NAZWA

       strcpy, strncpy - kopiuje łańcuch znaków

SKŁADNIA

       #include <string.h>

       char *strcpy(char *dest, const char *src);

       char *strncpy(char *dest, const char *src, size_t n);

OPIS

       Funkcja strcpy() kopiuje łańcuch znaków wskazywany przez src, łącznie z kończącym znakiem null ('\0'), do
       tablicy  wskazywanej  przez  dest.  Łańcuchy nie mogą na siebie nachodzić. Łańcuch docelowy dest musi być
       wystarczająco długi, żeby pomieścić kopie src. Prosimy  uważać  na  przepełnienia  bufora!  (Patrz  BŁĘDY
       IMPLEMENTACJI).

       Funkcja  strncpy()  jest podobna, z tym że kopiuje nie więcej niż n bajtów z src. Ostrzeżenie: Jeżeli nie
       było znaku null wśród pierwszych n bajtów src, to łańcuch dest nie będzie zakończony znakiem null.

       Jeśli długość src jest mniejsza niże n, to  strncpy() zapisze dodatkowe znaki null do dest, aby zapewnić,
       że n bajtów zostało zapisane.

       Prosta implementacja strncpy() mogłaby wyglądać tak:

           char *
           strncpy(char *dest, const char *src, size_t n)
           {
               size_t i;

               for (i = 0; i < n && src[i] != '\0'; i++)
                   dest[i] = src[i];
               for ( ; i < n; i++)
                   dest[i] = '\0';

               return dest;
           }

WARTOŚĆ ZWRACANA

       Funkcje strcpy() i strncpy() zwracają wskaźnik do łańcucha docelowego dest.

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
       ┌─────────────────────┬────────────────────────┬─────────┐
       │ InterfejsAtrybutWartość │
       ├─────────────────────┼────────────────────────┼─────────┤
       │ strcpy(), strncpy() │ Bezpieczeństwo wątkowe │ MT-Safe │
       └─────────────────────┴────────────────────────┴─────────┘

ZGODNE Z

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

UWAGI

       Niektórzy programiści uważają strncpy() za nieefektywną i podatną na błędy. Jeśli programista wie (tj. ma
       kod, który to testuje!), że rozmiar dest jest większy od rozmiaru src, to może użyć strcpy().

       Jednym poprawnym (i zamierzonym) użyciem strncpy() jest kopiowanie łańcucha znaków języka C do  bufora  o
       ustalonej  długości,  zapewniając  przy  tym,  że zarówno bufor nie jest nadpisywany, jak i że nieużywane
       bajty bufora docelowego są zerowane (być może po to, by zapobiec wyciekom danych,  jeśli  bufor  docelowy
       zostanie gdzieś zapisany lub przesłany do innego procesu za pomocą technik komunikacji międzyprocesowej).

       Jeśli  nie  ma  kończącego  bajtu  null  w pierwszych n bajtach w src, to strncpy() utworzy niezakończony
       łańcuch w dest. Jeśli buf ma długość buflen, można wymusić jego zakończenie w sposób podobny do opisanego
       poniżej:

           if (buflen > 0) {
               strncpy(buf, str, buflen - 1);
               buf[buflen - 1]= '\0';
           }

       (Oczywiście powyższa technika  ignoruje  fakt,  że  jeśli  src  zawiera  więcej  niż  buflen - 1  bajtów,
       informacja jest tracona podczas kopiowania ich do dest).

   strlcpy()
       Niektóre systemy (BSD, Solaris i inne) zawierają następującą funkcję:

           size_t strlcpy(char *dest, const char *src, size_t size);

       Funkcja  jest podobna do strncpy(), ale kopiuje co najwyżej size-1 bajtów do dest, zawsze dodaje kończący
       bajt null, i nie dopisuje dodatkowych bajtów null. Funkcja rozwiązuje kilka problemów obecnych w strcpy()
       i strncpy(), jednakże program wywołujący wciąż musi obsłużyć możliwość utraty danych, jeśli size jest  za
       małe. Funkcja zwraca długość łańcucha src, co pozwala na proste wykrycie obcięcia łańcucha: jeśli wartość
       zwrócona  jest  większa  lub  równa size, to łańcuch został obcięty. Jeśli utrata danych ma znaczenie, to
       program wywołujący musi albo sprawdzać argumenty  przed  wywołaniem,  albo  sprawdzać  wartość  zwracaną.
       strlcpy() nie jest obecna w glibc i nie jest opisana w standardzie POSIX, jednak jest dostępna w Linuksie
       w bibliotece libbsd.

BŁĘDY

       Jeśli  docelowy  łańcuch  znaków przekazany do strcpy() nie jest wystarczająco duży, to wszystko może się
       stać. Nadpisywanie buforów o stałej długości jest ulubioną techniką crackerów przejmowania  kontroli  nad
       komputerem.  Program,  kiedykolwiek  tylko  czyta  dane  z  buforu lub je do niego kopiuje, najpierw musi
       sprawdzić, czy jest wystarczająca ilość  dostępnego  miejsca.  Może  to  być  niepotrzebne,  jeśli  można
       wykazać,  że  nadpisanie  bufora  jest  niemożliwe. Należy jednak być ostrożnym: programy zmieniają się w
       czasie, i to w taki sposób, że niemożliwe może stać się możliwe.

ZOBACZ TAKŻE

       bcopy(3), memccpy(3), memcpy(3), memmove(3),  stpcpy(3),  stpncpy(3),  strdup(3),  string(3),  wcscpy(3),
       wcsncpy(3)

O STRONIE

       Angielska  wersja  tej strony pochodzi z wydania 5.10 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/.

T◈UMACZENIE

       Autorami  polskiego  tłumaczenia niniejszej strony podręcznika są: Jarosław Beczek <bexx@poczta.onet.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.

GNU                                              6 marca 2019 r.                                       STRCPY(3)