Apropo de snprintf() si 0-ul de la sfirsit: snprintf() ala din C99, care exista in GLIBC si alte biblioteci de C, scrie si 0-ul, deci nu-i nevoie de chestia aia cu pusul terminatorului explicit. Problema e ca snprintf() nu exista in CRT-ul Microsoft din diverse motive timpite.
In CRT-ul Microsoft exista _snprintf(), cu underscore-ul ala in fata, care are intr-adevar problema cu lipsa terminatorului daca buffer-ul e prea mic. Pe scurt, daca urmatorul cod se compileaza:
Cod sursă:
snprintf(buf, sizeof(buf), "bla bla bla");
nu trebuie sa faci nimic. Daca nu se compileaza, esti pe tarimul micromoale, unde trebuie sa faci ce-a zis jos8cal:
Cod sursă:
_snprintf(buf, sizeof(buf), "bla bla");
buf[sizeof(buf)-1] = 0;