strcat(3) połączenie dwóch łańcuchów

Other Alias

strncat

SKŁADNIA

#include <string.h>


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

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

OPIS

Funkcja strcat() dołącza łańcuch src do łańcucha dest, nadpisując znak null ('\0') kończący dest i dodając znak null na końcu wyniku. Łańcuchy nie mogą na siebie nachodzić a łańcuch dest musi zawierać dostateczną ilość miejsca na wynik. Jeśli dest nie zawiera wystarczającej ilości miejsca, to zachowanie programu jest nieprzewidywalne, gdyż występuje przepełnienie bufora, które jest najbardziej popularnym sposobem atakowania bezpiecznych programów.

Funkcja strncat() jest podobna, z wyjątkiem tego, że

*
użyje co najwyżej n bajtów z src oraz
*
src nie musi być zakończony znakiem null, jeśli zawiera n lub więcej bajtów.

Tak jak w przypadku strcat() wynikowy łańcuch w dest jest zawsze zakończony znakiem null.

Jeśli src zawiera n lub więcej bajtów, to strncat() zapisze n+1 w dest (n z src plus kończący bajt null). Dlatego też rozmiar dest musi wynosić co najmniej strlen(dest)+n+1.

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

char*
strncat(char *dest, const char *src, size_t n)
{
    size_t dest_len = strlen(dest);
    size_t i;
    for (i = 0 ; i < n && src[i] != '\0' ; i++)
        dest[dest_len + i] = src[i];
    dest[dest_len + i] = '\0';
    return dest;
}

WARTOŚĆ ZWRACANA

Funkcje strcat() i strncat() zwracają wskaźnik do wynikowego łańcucha dest.

ATRYBUTY

Wielowątkowość (patrz pthreads(7))

Funkcje strcat() i strncat() są bezpieczne dla wątków.

ZGODNE Z

SVr4, 4.3BSD, C89, C99.

UWAGI

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


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

Funkcja dołączą zakończony znakiem null łańcuch src do łańcucha dest, kopiując z src co najwyżej size-strlen(dest)-1 znaków i dodając kończący znak null, chyba że size jest mniejsze od strlen(dest). Funkcja rozwiązuje problem przepełnienia bufora występujący w strcat(), 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, który strlcat() próbowało utworzyć; jeśli wartość zwrócona jest większa lub równa size, to część danych została utracona. Jeśli utrata danych ma znaczenie, to program wywołujący musi albo sprawdzać argumenty przed wywołaniem, albo sprawdzać wartość zwracaną. strlcat() nie jest obecna w glibc i nie jest opisana w standardzie POSIX, jednak jest dostępna w Linuksie w bibliotece libbsd.

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ą: Andrzej Krzysztofowicz (PTM) <[email protected]> i Robert Luberda <[email protected]>.

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.