在UNIX环境中,我会使用带有短缓冲区的vsnprintf()来获取结果字符串的长度。有了这些信息,我可以用malloc()足够的内存来做实际的格式化。喜欢在:
va_list args;
char *ptr = NULL;
int len = 0;
char buf[2];
va_start(args, fmt);
len = vsnprintf(buf, 1, fmt, args);
if(len > 0) {
ptr = malloc(len + 1, "tempdata", 0L);
vsprintf(ptr, fmt, args);
}
va_end(args);
我的问题是,我使用的是一个非常古老的Windows环境(Microsoft Visual C ++ 6.0 / 1998),其中只有函数_vsnprintf()需要足够大的内存来进行计数。使用相同的静态缓冲区计算长度是不是线程安全?