fopen函数的问题:函数返回NULL的情况都有哪些???

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fopen函数的问题:函数返回NULL的情况都有哪些???相关的知识,希望对你有一定的参考价值。

我遇到的问题是这样的:fp = fopen("disk.dat","rb"))==NULL,这条语句成立的原因我知道可能是文件不存在,可是fp = fopen("disk.dat","wb"))==NULL这条语句成立的原因有哪些?我知道rb是读写打开一个二进制文件,该文件必须已经存在,且只能从该文件读出。而用“wb”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。所以wb也就不存在因为文件不存在而返回NULL的情况了,那在什么情况下,可能会返回NULL呢???先谢谢了!!

有几种情况:1.硬盘空间满,不能再创建文件 2.文件名有错误,有非法字符比如?,*等
3.你对那个目录没有创建文件的权限,比如NTFS 4.文件已经存在,但是无法被覆盖或者打开,比如另一个进程已经独占打开了,这是你就不能再打开了
参考技术A 应该写 (fp = fopen("disk.dat", "rb")) == NULL 。
前面没括号,如果 fopen 返回 NULL,fp 就是 1,否则就是 NULL。

你的语句本质上是把后面 fopen 返回值和 NULL 比较的 bool 值给了fp。
相当于
if(fopen("disk.dat", "rb")) == NULL)
fp = true;
else
fp = false;
或者
fp = static_cast<bool>(fopen("disk.dat", "rb") == NULL);
另外,为了程序安全,最好使用 fopen_s,fopen 有安全隐患。
这个火不知道救得及不及时 = =
参考技术B 文件打开失败时,函数会返回null值。比如:
以“r”方式打开一个不存在的文件,就会返回NULL;
以"w"方式打开一个不允许更改的文件,或由其他程序打开而锁定的文件,就会返回NULL;
参考技术C 楼上说法正确
还有就是你比如你想打开F盘的某个文件
但你电脑根本没有F盘,这时就会出现IO异常,就会返回NULL
请采纳为最佳答案,谢谢!
参考技术D 文件不存在啦
读写权限不够啦等等追问

我的权限也够,那是不是就没有了?

opencv出现问题,错误error C2660: “fopen_s”: 函数不接受 2 个参数

求问怎么改
void _setDestination(const char* name)

if (name==NULL)
stream = stdout;

else
stream = fopen_s(name, "w");
if (stream == NULL)
stream = stdout;



是这一句的问题stream = fopen_s(name, "w");

参考技术A 对于fopen_s来说,得定义另外一个变量errno_t err,err = fopen_s(&fp,filename,"w"),打开文件成功返回0,失败返回非0。本回答被提问者和网友采纳 参考技术B 用fopen就可以了。
fopen_s和fopen接口不一样。
参考技术C 将问题句改为:
fopen_s(&fp,"name","w");试试看呐

以上是关于fopen函数的问题:函数返回NULL的情况都有哪些???的主要内容,如果未能解决你的问题,请参考以下文章

opencv出现问题,错误error C2660: “fopen_s”: 函数不接受 2 个参数

php中fopen函数的返回值是啥啊?

fopen()函数

C语言fopen函数和其参数

mysql中常用的聚合函数都有哪些?

fopen参数介绍