我正在尝试使用以下代码在 C++ 中打开一个文件:
#include <iostream>
#include <stdio.h>
int main()
{
const char* filename = "database.txt";
const FILE* fp = fopen(filename, "r+");
// If opened correctly, prints out a memory addr.
// if not, prints out 0.
std::cout << fp << std::endl;
// Check proper access
if(!fp)
{
std::cout << filename;
perror(" opening failed");
return EXIT_FAILURE;
}
}
要打开的文件名为
databases.txt
。如果找到并打开该文件,则变量 fp
会是堆栈中不同于 0 的某个地址。如果没有发生这种情况,fp
恰好为 0,这就是 if
条件检查该值的原因。为什么会出现这种情况?为什么 fp
文件的名称是“分配的内存地址”?
fopen()
返回指向 FILE
对象的 pointer。您正在打印指针指向的“内存地址”。 如果
fopen()
失败,则返回 NULL
,打印为 0
。