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的主要内容,如果未能解决你的问题,请参考以下文章

C语言fopen函数和其参数

c语言 fopenfwritefclose函数(打开文件进行读写覆盖或追加)

c语言库函数的打开文件函数

C语言文件操作

怎样用C语言打开文件夹(源代码)

C语言文本文件操作