c语言fopen返回Null
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言fopen返回Null相关的知识,希望对你有一定的参考价值。
这是程序里的一句
if (argc < 2)
fprintf(stderr, "usage: %s filename\n", argv[0]);
exit(1);
if ((in = fopen(argv[1], "r")) == NULL)
fprintf(stderr, "I couldn't open the file \"%s\"\n",argv[1]);
exit(2);
if ((out = fopen("lifetime_result.txt", "w")) == NULL)
fprintf(stderr, "can't create output file.\n");
exit(3);
程序每次都返回3,但是监控时我发现第一个fopen返回的也是Null,并且要读的文件也在呀,怎么回事?
加一个 #include <errno.h>
fprintf(stderr, "I couldn't open the file [%s], %d|%s \n",argv[1], errno, strerror(errno) );
fprintf(stderr, "can't create output file.%d|%s\n", errno, strerror(errno) );
每次都返回3是第二个if判断没加上大括号 参考技术A if ((out = fopen("lifetime_result.txt", "w")) == NULL)
fprintf(stderr, "can't create output file.\n");
exit(3);
少了一对括号 参考技术B 赋值文件的完整路径
C语言文件操作
文件操作基本流程:
•打开:fopen
•关闭:fclose
fopen函数原型:FILE *fopen(const char *filename, const char *mode)
fopen函数打开filename指定的文件, 并返回一个与之相关联的流。 如果打开操作失败,则返回 NULL
访问模式mode可以为下列合法值之一:
"r" 打开文本文件用于读
"w" 创建文本文件用于写, 并清空原有内容
"a" 追加, 打开或创建文本文件,并向文件末尾追加内容
"r+" 打开文本文件用于更新(即读和写)
"w+" 创建文本文件用于更新,并清空原有内容
"a+" 追加, 打开或创建文本文件用于更新, 写文件时追加到文件末尾
ps:如果在上述访问模式之后加上 b , 如 "rb" 或 "w+b" 等,则表示对二进制文件进行操作
fclose函数原型:int fclose(FILE *fp)
fclose函数的功能是关闭 fp 指向的文件 正常关闭返回0, 出错时返回非0
文件操作结束不关闭文件可能丢失数据!
•fseek() 函数
fseek()函数在打开的文件中定位。
该函数把文件指针从当前位置向前或向后移动到新的位置,新位置从文件头开始以字节数度量。
fseek(file,offset,whence)
- offset 规定新的位置(从文件头开始以字节数度量)
- whence
SEEK_SET - 设定位置等于 offset。默认SEEK_CUR - 设定位置为当前位置加上 offset。
SEEK_END - 设定位置为文件末尾(EOF)加上 offset
要移动到文件末尾之前的位置,offset 必须是一个负值
•代码示例
View Code
以上是关于c语言fopen返回Null的主要内容,如果未能解决你的问题,请参考以下文章