C/strncpy

< C

DeklaracjaEdytuj

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

Plik nagłówkowyEdytuj

string.h

ArgumentyEdytuj

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

OpisEdytuj

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

Funkcja zwraca wskaźnik na strTo.

NiebezpieczeństwaEdytuj

  • 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ładEdytuj

#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łaEdytuj

  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