C/strncpy

Z Wikibooks, biblioteki wolnych podręczników.
< C

Deklaracja[edytuj]

char *strncpy (char* strTo, const char* strFrom, size_t size);

Plik nagłówkowy[edytuj]

string.h

Argumenty[edytuj]

strTo
wskaźnik do docelowej tablicy znaków.
strFrom
wskaźnik do źródłowej tablicy znaków.
size
liczba znakow do skopiowania.

Opis[edytuj]

Funkcja kopiuje co najwyżej size znaków z tekstu w tablicy strFrom do tablicy strTo. Funkcja kopiuje znak po znaku od początku, aż skopiuje size znaków lub napotka znak '\0', wtedy za resztę znaków do skopiowania wstawia '\0'.

Wartość zwracana[edytuj]

Funkcja zwraca wskaźnik na strTo.

Niebezpieczeństwa[edytuj]

  • Tablica strTo powinna być większa od wartości size, ponieważ, w przeciwnym wypadku, może dojść do przepełnienia bufora.[1]
  • przekazywanie nielegalnych wskaźników dla argumentów źródłowego lub docelowego[2]

Przykład[edytuj]

#include <stdio.h>
#include <string.h>

int main()
{
    char strTo[30];
    const char *strFrom = "Ala ma kota";   // tekst krótszy niż 30 znaków

    strncpy (strTo, strFrom, 12);   // kopiuje 12 znakow (11 + znak \0)
    puts(strTo);
    return 0;
}

Uwaga: strncpy nie dostawia znaku '\0', dlatego:

  • musimy go skopiować lub wstawić ręcznie
  • używać strlcpy[3][4]

Źródła[edytuj]

  1. stackoverflow question : why-does-strncpy-not-null-terminate?
  2. quora : is-strncpy-a-safe-operation-If-not-how-can-I-make-it-safe
  3. randomascii: stop-using-strncpy-already
  4. stackoverflow question: c-strncpy-null-terminated-or-not

Zobacz też[edytuj]

strcpy
strlcpy
strncat
memcpy