Well one could argue that in C a string is not a string unless it&#x27;s NUL terminated...<p>It&#x27;s a choice they made to make it easy to detect truncation. If you don&#x27;t care about the return value of strlcpy you can modify it to skip that part (which IMO will make it worse) but get rid of traversing src until \0 is found.<p>If you know you&#x27;re working with non-terminated &quot;strings&quot; then just use memcpy instead.<p>If you&#x27;re using proper functions you shouldn&#x27;t end up with a non NUL-terminated string in the first place, although there are shortcomings in the commonly used libraries here unfortunately yes. It&#x27;s hard to create a function that solves all problems.<p>(Side note: IMO The return value of latest OpenBSD version of strlcat (cat not cpy) is a bit weird when size is smaller than strlen(dst))