Strncpy

adf88
char *strncpy(char *dest, const char *src, size_t maxlen);

Kopiuje łańcuch znaków z src do dest.
Znaki kopiowane są do momentu skopiowania pierwszego znaku null lub skopiowania maxlen znaków. Jeśli długość łąńcucha src jest większa lub równa maxlen to łańcuch dest nie będzia zawierał kończącego znaku null.

Parametry:<dl><dt>dest</dt><dd>Wskaźnik do tablicy docelowej. Tablica musi pomieścić min(strlen(src)+1, maxlen) znaków.</dd><dt>src</dt><dd>Wskaźnik na łańcuch źródłowy.</dd><dt>maxlen</dt><dd>Maksymalna ilość znaków do skopiowania.</dd></dl>Zwracana wartość:
Zwraca dest.

Przykład

```c #include <stdio.h> #include <string.h>

int main()
{
char str[6];

strncpy(str, "123456789", 5); //zostanie skopiowane 5 znaków
str[5] = '\0'; //zakańczamy łańcuch własnoręcznie, gdyż żaden znak null nie został skopiowany
printf("%s\n", str);

strncpy(str, "123", 5); //zostaną skopiowane 4 znaki (łącznie ze znakiem null)
printf("%s\n", str);
return 0;
}

Wersja Unicode:

```c
wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, size_t maxlen);

Kwestia bezpieczeństwa:
Stosujcie strncpy zamiast strcpy ze względu na ryzyko przepełnienia bufora i zagrożenie z tego wynikające.
Gdy dane pochodzą od użytkownika to zawsze trzeba upewnić się co do ich długości.

Jak można przepełnić stos: wydanie 49 magazynu phrack na www.phrack.org

Zobacz też:

0 komentarzy