C/strncpy
Wygląd
< C
Deklaracja
[edytuj]- char *strncpy (char* strTo, const char* strFrom, size_t size);
Plik nagłówkowy
[edytuj]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:
Źródła
[edytuj]- ↑ stackoverflow question : why-does-strncpy-not-null-terminate?
- ↑ quora : is-strncpy-a-safe-operation-If-not-how-can-I-make-it-safe
- ↑ randomascii: stop-using-strncpy-already
- ↑ stackoverflow question: c-strncpy-null-terminated-or-not