Przejdź do zawartości

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