由于某些原因,我需要一个指向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上,为它提供一个临时字符串,之后将其丢弃。 通用标签

然后您只需致电: 通用标签

(可以对该功能进行增强,以计算显示任何内容所需的大小,但我现在暂时保持简单。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top