首页 > 解决方案 > 表达式 (fileNew == NULL) 是否总是正确的?

问题描述

我正在自学 c++(和 c),我学习的一种方法是解构(和修复)用于连接蓝牙 OBD 阅读器并在汽车显示屏上显示读数的 pi 程序。

我的问题:在这个程序中,我找到了这条线

if(fileNew == NULL || fileOld == NULL) fprintf(stderr, "Warning: Could not edit dhcpcd");

这个表达式不总是正确的吗?据我了解,如果我打开一个新文件来记录信息,在我将信息放入文件之前,它将为 NULL。如果我理解正确,那么程序不会总是通过将消息发送到 stderr 来响应,反过来,由于该程序的逻辑,无法打开 fileNew?在此行之前的 fopen 命令中,fileOld 和 fileNew 都被赋予了唯一的名称。

我在网上搜索了答案,出现的任何内容都是指 javascript。在我检查的所有结果中,表达式 NULL 不存在。这里没有类似的问题。我已尽我所能阅读了我正在使用的文本引导,但还没有找到答案。我做过研究。

标签: c++

解决方案


不。

空文件指针并不意味着“文件为空”。这意味着“此指针无效;它不代表打开文件流的句柄”。

如果您执行fopen并且操作成功,它会返回一个FILE*作为文件流句柄的您。文件中是否有数据无关紧要。

然后,您使用该句柄(fileNew我猜,在您的示例中)对文件执行任何您想要的操作,无论是读取还是写入或其他任何操作。

NULL如果由于fopen某种原因调用失败(例如权限不足),指针将是,因为这是设计者所fopen决定的。

tl; dr 文件指针和文件是两个不同的东西。


推荐阅读