c++ - 表达式 (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 不存在。这里没有类似的问题。我已尽我所能阅读了我正在使用的文本引导,但还没有找到答案。我做过研究。
解决方案
不。
空文件指针并不意味着“文件为空”。这意味着“此指针无效;它不代表打开文件流的句柄”。
如果您执行fopen
并且操作成功,它会返回一个FILE*
作为文件流句柄的您。文件中是否有数据无关紧要。
然后,您使用该句柄(fileNew
我猜,在您的示例中)对文件执行任何您想要的操作,无论是读取还是写入或其他任何操作。
NULL
如果由于fopen
某种原因调用失败(例如权限不足),指针将是,因为这是设计者所fopen
决定的。
tl; dr 文件指针和文件是两个不同的东西。
推荐阅读
- c# - 为什么我得到 System.IndexOutOfRangeException
- javascript - TextureLoader.load() 返回的纹理在 IE11 上具有未定义的图像
- java - 条形图中的数据集在 MpAndroidChart 中绘制错误
- python - 如何使用numpy从另一个数组中删除/选择给定外部条件的矩阵中的行?
- cloud - 我应该使用哪个存储来存储不经常使用的数据
- javascript - 加载基本 jquery 文档的正确模式是什么:ready 事件?
- c# - 如何使用他使用 VkNet 向我发送的相同附件向用户发送消息?
- c# - 我的 POST 请求在 c# 中失败,但在 POSTMAN 中工作得很好
- python-3.x - 无法在 VS 2017 中记录 Python 函数
- java - 切换选项卡时从片段中保存数据