Ah, right. From a *user's* perspective we cannot use open_memstream() et al because they are not portable. From a *library developer's* perspective we shouldn't introduce strlcpy() because it sucks and everyone should just use open_memstream(). :)
Obviously the only real solution is to write your own string abstraction using counted strings or whatever floats your boat...