strlcpy a strlcat jsou nestandardní funkce vytvořené jako náhrada za často zneužívané protějšky standardní knihovny programovacího jazyka C pro kopírování obsahu řetězce ukončeného nulou do vyrovnávací paměti omezené velikosti s ochranou proti přetečení vyrovnávací paměti .
strlcpy a strlcatjsou bezpečnou a efektivní náhradou za standardní funkce strncpya strncat, resp.
strlcpya strlcatobjevily se a jsou udržovány v OpenBSD . Později se začaly používat v některých dalších operačních systémech. Na systémech, které nepodporují strlcpy/ strlcat, je možné je implementovat řemeslným způsobem, například ze zdrojového kódu distribuovaného pod licencí BSD .
Prototypy popsané v záhlaví souboru string.h:
size_t strlcpy (char *dst, const char *src, size_t size); size_t strlcat (char *dst, const char *src, size_t size);Funkce strlcpyzkopíruje z řetězce srcdo vyrovnávací paměti dstmaximálně znaků size - 1a je zaručeno, že na konec řetězce nastaví znak null. strlcatdělá totéž, kopírování se však neprovádí na začátku dst, ale tak, aby pokračovalo v řádku, na který ukazuje dst. V případě, že dstukazuje na znak null , je chování funkcí ekvivalentní.
strlcpyvrátí velikost řetězce na src. strlcatvrátí celkovou délku řetězců na adresách srca dst. Vrácená hodnota nezávisí na tom, zda byl celý řetězec úspěšně zkopírován nebo ne; to usnadňuje určení, zda je cílová vyrovnávací paměť pro kopírovaný řetězec příliš malá.
Závěr:
řetězec: "vzor řetězce" vyrovnávací paměť před kopírováním: "" zjištěno zkrácení řetězce ze 14 na 9 znaků! vyrovnávací paměť po kopii: "sample with"(řetězec byl při kopírování zkrácen na velikost vyrovnávací paměti - 9 znaků + nula)
OpenBSD | |
---|---|
Operační systém |
|
vidličky |
|
Související projekty | |
Lidé |
|
Organizace a další zdroje |
|