C/strdup

< C

Inne nazwyEdytuj

  • strdup
  • strndup

Dostępne w pakiecie GNU GCC:

  • strdup
  • strndup

SkładniaEdytuj

#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);

ArgumentyEdytuj

  • s - łańcuch do kopiowania
  • n - długość łańcucha

OpisEdytuj

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ść zwracanaEdytuj

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 zEdytuj

SVID 3, BSD 4.3.

strndup(), strdupa() i strndupa() są rozszerzeniami GNU.

Zobacz takżeEdytuj