int _snprintf_s(
char *buffer,
size_t sizeOfBuffer,
size_t count,
const char *format [,
argument] …
);
-
sizeofBuffer,打算用于存储的缓冲区的宽度,注意,它与buffer是否还有很多空间无关,即使buffer还有很多空间,sizeofBuffer指定的大小才是你告诉该函数要使用的空间,换句话说,sizeofBuffer指定了当前有效的缓冲区的大小。
-
count,它存在的目的是,当后面参数得到的内容宽度超出了sizeofBuffer之后,避免缓冲区溢出,程序会自动截取count宽度的内容,并且追加一个结束符,也就是说count最多指定为sizeofBuffer-1,count可以等于sizeofBuffer,前提是后面参数得到的内容宽度没有溢出。将count参数设置为_TRUNCATE,如果内容宽度没有超出sizeofBuffer,则后面内容是多少就存多少,只有当内容宽度超出的时候,就等同于sizeofBuffer-1,也就是说只有溢出的时候_TRUNCATE才起到作用。
-
即,count才是目标内容的宽度,sizeofBuffer只是缓冲区的宽度,当知道后面参数的真实宽度时,应该是指定在count上。
-
_snprintf_s 总是要追加一个结束符,因此,如果count和sizeofBuffer相等,并且后面内容大于等于了这个宽度,那么结束符就无处安放了,也就是会导致溢出。