char str[10];
int rt = snprintf(str, 3, "%s", "0123456789"); // 請注意這裡的3是包括結尾符在内的,是以執行後,str的值應當為“01”,而不是“012”
上述代碼,rt将為10。
重新實作snprintf,讓它傳回實際寫入的位元組數(要減去結尾符):
int snprintf(char * buf, size_t size, const char *fmt, ...)
{
int i;
va_list args;
va_start(args, fmt);
i=vsnprintf(buf,size,fmt,args);
va_end(args);
return (i >= size) ? (size - 1) : i;
}
最好給snprintf換個名字,或者放在自己的名字空間内,以免和全局的沖突。