Spíš proč nepoužívat některé funkce ze standardní knihovny C.
Nicméně někteří lidé, co píší v C, si už napsali vlastní knihovny, kde je tohle a mnoho dalších věcí vyřešených lépe.
Podívejte se třeba jak píše v C Ryan Fleury případně Eskil Steenberg. Ten první je mi bližší, ale oba mají blogy nebo přednášky, kde ukazují, jak v C psát funkční a efektivní kód.
Takže standardní knihovna céčka vlastně stačí tak k tomu, aby si každý programátor/projekt implementoval vlastní nadstandardní knihovnu. Rozumím té motivaci - programátor ví nejlíp, jakou implementaci pro ten který problém zvolit a jaké okrajové podmínky musí dodržet... ale.
Umět s céčkem ale znamená umět nejenom syntax, ale i všechny nadsyntaktické možnosti a pasti preprocesoru; schopnosti standardní knihovny a také její neschopnosti - protože jazyk a standardní knihovna mají dost omezené schopnosti bezpečného selhání a konkrétní implementace mají možnost udělat eval(UB) místo panic(UB); a k tomu veškerý tooling a konvence toho kterého projektu - nadstandardní knihovnou počínaje a specifickými instrukcemi pro formátování kódu konče.
To není zrovna dobrá vizitka - i přes všechny výhody, které přístup "každý sám za sebe" přináší stran stability, nezávislosti a údržby.
Vím vím. Jednou jsem kuchal takový zabugovaný string a nahrazoval jeho vnitřnosti std stringem. Řádově jednodušší, ale stejně nastávaly zajímavé věci.
Naštěsti se dá spolehnout na to, že std::string programátoři +- znají. Takže jde používat v novém kódu std::string a řešit staré stringy jen na jeho hranici. Ta dodatečná složitost se dá zkousnout, za cenu toho, že ten starý string pomaličku mizí.
ISO C11 (Annex K) podporuje vlastně jen Microsoft.
BSD/macOS má vlastní strlcpy().
Jinak: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm
Pořád jsou to jen pojídači koláčů. Skutečný programátor nepíše v C, píše ve FORTRANu a používá GOTO.
No nevim, tenhle hate kdyz tu mame https://linux.die.net/man/3/strlcpy ale proc si nekopnout...
Protože strlcpy se sice na rozdíl od dá použít bezpečně, ale furt to není nic jistého. Vždyť i vámi odkazovaný manuál zmiňuje, že se jeho autoři na první pokus sekli.
A tohle je jenom kopie. Nic specificky stringového. Jen něco, co umí vlastně všechny normální datové typy. A navrch je někde strlcpy a jinde zas strcpy_s.
V normálním jazyce by strlcpy a spol byla ostuda a dobrý důvod pro hate. Ale tohle je C.