if (NULL == Fp) return true;为什么不能写成if (FP == NULL) return true;
时间: 2023-12-06 18:03:44 浏览: 225
if (NULL == Fp) 和 if (Fp == NULL) 的意思是一样的,都是判断指针 Fp 是否为空指针。
但是 if (NULL == Fp) 更加安全,因为在 C/C++ 中,= 是赋值运算符,== 是比较运算符。如果写成 if (Fp = NULL) ,是将 Fp 赋值为 NULL,然后条件判断结果为 false,这样就会出现错误。
为了避免这种错误的发生,通常采用 if (NULL == Fp) 的写法,将常量 NULL 放在等式的左边,这样如果误写成赋值运算符,编译器会报错,从而避免程序出错。
相关问题
有无问题bool SuccessfulOpen(FILE* Fp) { if (NULL == Fp) return true; else return false; }
这个函数的逻辑有误。如果文件指针 `Fp` 为空指针,则返回 true,表示打开文件成功;否则返回 false,表示打开文件失败。这显然是错误的。正确的逻辑应该是,如果文件打开成功,则返回 true,表示操作成功;否则返回 false,表示操作失败。修改后的代码如下:
```c
bool SuccessfulOpen(FILE* fp) {
if (fp != NULL) {
return true; // 打开文件成功
}
else {
return false; // 打开文件失败
}
}
```
或者更简洁地写成:
```c
bool SuccessfulOpen(FILE* fp) {
return (fp != NULL);
}
```
这样,当 `fp` 为空指针时,函数返回 false,表示操作失败;否则返回 true,表示操作成功。
int ReadNode(int& N) //从文件读出结构体数组的内容,如成功读取返回TRUE,否则返回ERROR { FILE* fp; int i = 0; if ((fp = fopen("question", "rb")) == NULL) return ERROR; while (!feof(fp)) // 用feof检测文件是否结束,如果结束,返回正确 { fread(&Testquestions[i], sizeof(TestNode), 1, fp); i++; } N = i - 1; return TRUE; }
这段代码是用来从文件中读取结构体数组的内容,其中Testquestions是一个TestNode类型的结构体数组,N是传入的参数,用来返回成功读取的结构体数组的数量。这段代码首先打开名为“question”的二进制文件,然后使用while循环和feof函数来读取文件中的内容,每次从文件中读取一个TestNode类型的结构体,并将其存储在Testquestions数组中。最后,将成功读取的结构体数组的数量减1赋给N,并返回TRUE表示读取成功,返回ERROR表示读取失败。
阅读全文