为什么输出的 vsnprintf 的返回值随着执行次数不同而变化呢? man vsnrpintf 手册上说的返回值是写入最终的字符串长度(如下截图中:the final string),但是实际测试并不是? 按文档说法:返回值应该为3; 实际测试结果:不为3,也不为10,而是14、15、16这样变化的数。  void foo(const char* format, ...){ va_list ap; va_start(ap, format); int res1 = vsnprintf(NULL, 0, format, ap); printf("====res1=%d\n", res1); char buf[200] = {'\0'}; memset(buf, 0, 200); int res2 = vsnprintf(buf, 3, format, ap); printf("====res2=%d, buf=%s\n", res2, buf); //多次直行a.out,值为什么不同呢? va_end(ap); } int main() { foo("say=%d\n", 10000); return 0; } 输出: ./a.out ====res1=10 ====res2=16, buf=sa ./a.out ====res1=10 ====res2=14, buf=sa ./a.out ====res1=10 ====res2=15, buf=sa