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