Programowanie w języku C/C++

Strncpy

  • 2010-10-31 18:27
  • 0 komentarzy
  • 1706 odsłon
  • Oceń ten tekst jako pierwszy
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:
dest
Wskaźnik do tablicy docelowej. Tablica musi pomieścić min(strlen(src)+1, maxlen) znaków.
src
Wskaźnik na łańcuch źródłowy.
maxlen
Maksymalna ilość znaków do skopiowania.
Zwracana wartość:
Zwraca dest.

Przykład


#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:

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ż: