C/strdup

Z Wikibooks, biblioteki wolnych podręczników.
< C
Przejdź do nawigacji Przejdź do wyszukiwania

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.

Zobacz także[edytuj]