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");
fopen_s和fopen接口不一样。 参考技术C 将问题句改为:
fopen_s(&fp,"name","w");试试看呐
以上是关于fopen函数的问题:函数返回NULL的情况都有哪些???的主要内容,如果未能解决你的问题,请参考以下文章