Et bien non !
snprintf() semble ne pas garantir le '\0' terminal, donc n'est même pas safe non plus.
D'ailleurs le compilo Microsoft le déclare deprecated.
Enfin j'ai pas bien compris si pour C99 ils ont décidé de garantir le '\0'*.
Mais par défaut, il faut comme pour strncpy le faire systématiquement suivre par un
dst[sizeof(dst) - 1] = '\0';
Bref, beau bordel.
edit: *après recherches, ça ne semble vrai qu'avec l'implémentation Microsoft en particulier.
Au passage, je crois comprendre pourquoi il est si facile de se planter avec strncpy: on peut facilement croire à première vue que ça s'utilise comme memcpy.
Or c'est exactement le contraire:
memcpy(dst, src, sizeof(src)); // correct, ssi sizeof(src) <= sizeof(dst)
strncpy(dst, src, sizeof(src)); // incorrect
---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien