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.
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