是否有一个指向nothing的文件指针(FILE*)?
-
29-10-2019 - |
题
由于某些原因,我需要一个指向nothing的文件指针(FILE*)。这意味着我可以将它传递给fprintf函数,fprintf忽略文件指针。
例如:
void my_function()
{
FILE* nothing = NULL; // NULL is not correct.
int n = fprintf(nothing, "PI = %f", 3.14); // Note: When nothing = NULL, error ocured.
}
是否有一个指向nothing的文件指针(FILE*)?
解决方案
非也。.
您的代码将导致运行时异常。您可以使用 /dev/null
例如,如果您在支持它的操作系统上运行,但没有像c++中内置的那样。
其他提示
要解决您的实际问题(在评论中说明),请使用 snprintf
而不是 printf
, ,前提是它在您的C++实现中可用(在C++03中不保证)。为缓冲区传入空指针,为大小传入0。没有写入任何内容,但返回值是格式化字符串的长度(不包括nul终止符)。
[编辑:哎呀,我忘了 snprintf
在Windows上不符合C99。如果发生截断,则返回错误,而不是所需的长度。不知道他们要对C++0x需要符合C99的事实做些什么 snprintf
.]
要回答你的问题,你可以fopen /dev/null
在类UNIX系统或 nul
在Windows上。写入结果 FILE*
没有效果。但是,没有便携式空设备。
为什么不使用if (NULL != nothing)
语句包装fprintf方法调用?
尽管如NirMH说,可以将它 if (nothing != NULL)
, 有另一种方式。你可以打开文件,在阅读方式(与 "r"
)及时发送来 fprintf
, ,编写忽略(编辑:作为讨论的意见,记得设置 n=0
如果是否定的,因为返回的 fprintf
).
我个人建议的第一种方法虽然。的唯一原因我可能会做第二是如果我不能改变的功能。
如果你不关心如果你的代码系统的依赖,可以使用 /dev/null
在linux, nul
在窗户等等,
您犯了一个设计错误。
很显然,您想知道的是写数字所需的字符数。
您正在为此使用_ * printf_,这是一个好主意。您只想计算“写”的字符数,因此需要。但是您不希望显示任何内容,因此您选择了 fprintf 而不是 printf 。但是 fprintf 在没有要写入的文件的情况下无法工作...
就像史蒂夫所说的那样,您应该使用 snprintf(),将其写入内存中的字符串。
正如史蒂夫所说,带有NULL字符串的 snprintf 应该可以按预期工作,但Windows除外。然后在Windows上,为它提供一个临时字符串,之后将其丢弃。 通用标签
然后您只需致电: 通用标签
(可以对该功能进行增强,以计算显示任何内容所需的大小,但我现在暂时保持简单。)