C/strdup
Inne nazwy
[edytuj]- strdup
- strndup
Dostępne w pakiecie GNU GCC:
- strdup
- strndup
Składnia
[edytuj]#include <string.h> char *strdup(const char *s); #define _GNU_SOURCE #include <string.h> char *strndup(const char *s, size_t n); char *strdupa(const char *s); char *strndupa(const char *s, size_t n);
Argumenty
[edytuj]- s - łańcuch do kopiowania
- n - długość łańcucha
Opis
[edytuj]Funkcja strdup() zwraca wskaźnik do nowego łańcucha, który stanowi kopię łańcucha s. Pamięć dla nowego łańcucha jest przydzielana za pomocą malloc() i może być zwolniona za pomocą free().
strdup() może być zaimplementowana za pomocą funkcji malloc(), strlen() oraz strcpy() w poniższy sposób:
char* strdup(const char* p) { char* np = (char*)malloc(strlen(p)+1); return np ? strcpy(np, p) : np; }
Funkcja strndup() jest podobna, lecz kopiuje co najwyżej n znaków. Jeśli s jest dłuższe niż n, kopiowane jest tylko n znaków i dodawany jest kończący znak NULL.
strdupa i strndupa są podobne, ale korzystają z alloca() do przydzielania pamięci na bufor. Są one dostępne wyłącznie, gdy używany jest pakiet GNU GCC, i dotyczą ich te same ograniczenia, które opisano w alloca().
Wartość zwracana
[edytuj]Funkcja strdup() zwraca wskaźnik do skopiowanego łańcucha.W przypadku błędu zwraca wartość NULL, gdy nie jest dostępna dostateczna ilość pamięci, oraz ustawia zmienną errno na ENOMEM.
Zgodne z
[edytuj]SVID 3, BSD 4.3.
strndup(), strdupa() i strndupa() są rozszerzeniami GNU.