Provided by: manpages-pl-dev_0.6-2_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

   Wielowątkowość (patrz pthreads(7))
       Funkcje strcpy() i strncpy() są wątkowo bezpieczne.

ZGODNE Z

       SVr4, 4.3BSD, C89, C99.

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:

           strncpy(buf, str, buflen - 1);
           if (buflen > 0)
               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 IMPLEMENTACJI

       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 3.71 projektu Linux man-pages. Opis projektu, informacje
       dotyczące  zgłaszania   błędów,   oraz   najnowszą   wersję   oryginału   można   znaleźć   pod   adresem
       http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

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

GNU                                                2014-05-21                                          STRCPY(3)