你犯了一个设计错误。
显然,您想知道的是写您的号码所需的字符数。
为此,您正在使用 _*printf_,这是个好主意。您只想计算“写入”的字符数,因此需要。但是您不希望显示任何内容,因此您刺破了fprintf而不仅仅是printf。但是如果没有要写入的文件, fprintf就无法工作......
就像史蒂夫说的那样,您应该使用snprintf(),它将写入内存中的字符串。
正如史蒂夫所说,提供 NULL 字符串的snprintf应该按预期工作,但在 Windows 上除外。然后在 Windows 上,只需为它提供一个临时字符串,之后您将丢弃该字符串。
size_t computeNumCharsNeededToPrintMyStuff(double d)
{
size_t ret = 0;
size_t maxBuffSize = 100; // should be plenty enough
char *tmpBuff = new char[maxBuffSize ];
ret = snprintf(tmpBuff, maxBuffSize, "PI = %f", d);
delete[] tmpBuff;
return ret;
}
然后你只需调用:
n = computeNumCharsNeededToPrintMyStuff(3.14)
(可以增强此函数以计算显示任何内容所需的大小,但我现在宁愿保持简单。)