是否有文件指针 (FILE*) 不指向任何内容
Is there a file pointer (FILE*) that points to 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.
}
是否有文件指针 (FILE*( 不指向任何内容?
要解决您的实际问题(在注释中说明(,请使用 snprintf
而不是 printf
,前提是它在您的C++实现中可用(这在 C++03 中没有保证(。传入缓冲区的空指针和大小的 0。不写入任何内容,但返回值是格式化字符串的长度(不包括 nul 终止符(。
[编辑:哎呀,我忘了Windows上的snprintf
不符合C99。如果发生截断,则返回错误,而不是所需的长度。我不知道他们会怎么做C++0x需要符合C99标准的snprintf
。
要回答您的问题,您可以在类 UNIX 系统上打开/dev/null
,或者在 Windows 上nul
。写入生成的FILE*
不起作用。但是,没有便携式空设备。
No.
代码将导致运行时异常。例如,如果您在支持它的操作系统上运行,则可以使用/dev/null
,但C++中没有内置的类似内容。
为什么不用if (NULL != nothing)
语句包装fprintf方法调用呢?
虽然正如NirMH所说,你可以把它括在if (nothing != NULL)
中,还有另一种方法。您可以在读取模式下打开文件(使用 "r"
(,当您将其发送到 fprintf
时,写入将被忽略(编辑:如注释中所述,请记住设置n=0
如果它是负数,则由 fprintf
返回(。
不过,我个人建议第一种方法。我可能会做第二个的唯一原因是如果我无法更改函数。
如果你不关心你的代码是否依赖于系统,你可以在 linux 中使用 /dev/null
,nul
在 windows 等中使用。
你犯了一个设计错误。
显然,您想知道的是写入数字所需的字符数。
您为此使用 _*printf_,这是一个好主意。您只想计算"写入"的字符数,因此需要。但是你不想显示任何东西,所以你刺了fprintf,而不仅仅是printf。但是 fprintf 在没有文件写入的情况下不起作用......
就像史蒂夫说的,你应该使用 snprintf((,它写入内存中的字符串。
正如 Steve 所说,与 NULL 字符串一起提供的 snprintf 应该按预期工作,除了在窗口上。然后在 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)
(可以增强此功能以计算显示任何内容所需的大小,但我宁愿暂时保持简单。
你的意思是这样吗?
#include <stdio.h>
int main()
{
FILE *fdevnull = fopen("/dev/null", "w");
printf("printf length=%dn", fprintf(fdevnull, "Hello World '%s'=%fn", "PI", 3.14159));
fclose(fdevnull);
return 0;
}
- 是否有任何内置的哈希图函数来处理 c++ 中的值输入?
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- Visual Studio 停止识别任何包含文件
- C++ 中是否有任何内置阶乘函数?
- 是否有任何内置函数可以告诉编译器分支是否可预测
- 打开任何文本文件
- 在新的Visual Studio项目中包含任何Eigen 3.3.1文件将无法编译
- 似乎没有任何读取文件的方法可以工作,所有方法都不返回任何东西-C++
- 我需要在C /C#中使用图形.我可以使用任何内置的C /C#库
- 是否有任何内置类可以处理C 中的大整数值
- 在未包含在任何其他文件中的文件中使用 extern 变量是否有任何可能的用途
- 是否可以在不使用任何头文件的情况下在C++中执行I/O操作
- 在 C++ 中将编辑过的内文件保存到输出文件时出现问题
- c ++中是否有任何内置功能可以在计划的时间运行任务
- 是否有任何内置的 UTF 在 c++ 在窗口中
- 尝试从 c 执行任何二进制文件
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- CMake表示,它已经编写了构建文件,但没有找到任何构建文件
- 在VC++2010中执行任何内置的ARRAY函数
- C++:如何在不使用任何内置函数的情况下将字符串转换为整数