【发布时间】:2024-04-24 16:20:02
【问题描述】:
我正在寻找快速(针对性能关键代码)、安全且跨平台的方法来检查 FILE* 是否实际上在之前成功调用 fopen() 时指向文件。
使用ftell() 询问当前位置是一种方法,但是
我怀疑它是否最快、准确、安全,或者没有比这种方式更直接、更专注的方法了。
【问题讨论】:
-
if (file_pointer == NULL)是标准测试。发布您试图澄清问题的内容。 -
一般来说,没有可移植的方法来检查指针是否有效。不限于文件指针。
-
@chux 检查指针是否为
NULL,但它可能很好地指向某些东西。想象一下它是一个void*,可以根据用户表示为字符串文字或FILE*。你如何检查它是否是一个有效的FILE*?感谢您的反对。 -
可以使用
if ((void *)some_object_pointer_from_somewhere == (void *) pointer_returned_from_previous_fopen_call) -
@JuanPabloJuliosEstebaFiores 否决票是因为这个问题毫无意义。
FILE *指针不存在于真空中,它们存在于编写得好或不好的程序中。在编写良好的程序中,任何FILE *变量都包含(a)它的程序员初始化的NULL 值或(b)检查过的fopen调用的返回值,这意味着当我们到这里我们知道它是非空的。但是不,对于随机的FILE *指针,无法知道它是否有效。