文件的结尾和文件开头

简介:

c语言中文件的结尾指的是文件的最后一个字符的下一个字符

例如:文件a.txt中有三个字符abc,即文件大小为3

那么文件的实际内容如下图.

wKioL1hrBEaiQpc6AAAh2qwlCA8915.png

echo -n abc > a.txt


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
int  main( void ){
     FILE * fp =  fopen ( "a.txt" , "r" );
     if (NULL==fp){
         perror ( "fopen" ), exit (-1);
     }
     int  c;
     while (! feof (fp)){  //当文件指针第一次到达文件结尾处时,feof函数返回的是0.
         c =  getc (fp);
         printf ( "c=%d\n" ,c);
         if ( ferror (fp)){
             perror ( "ferror" ), exit (-1);
         }
     }
     fclose (fp);
     return  0;
}

c=97

c=98

c=99

c=-1




所以正确做法应该是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
 
int  main( void ){
     FILE * fp =  fopen ( "a.txt" , "r" );
     if (NULL==fp){
         perror ( "fopen" ), exit (-1);
     }
     int  c;
     while ((c= getc (fp))!=EOF){
         printf ( "c=%d\n" ,c);
         if ( ferror (fp)){
             perror ( "ferror" ), exit (-1);
         }
     }
     return  0;
}

c=97

c=98

c=99



如何读出文件最后一个字符c,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
int  main( void ){
     FILE * fp =  fopen ( "a.txt" , "r" );
     fseek (fp,-1,SEEK_END);
     char  c;
     c =  getc (fp);
     printf ( "c=%d\n" ,c);
     fseek (fp,0,SEEK_END);
     printf ( "feof(fp)=%d\n" , feof (fp)); //此时在文件结尾处
     //即文件最后一个字符(即c字符)的下一个字符处
     //结果为0
     c =  getc (fp); 
     printf ( "c=%d\n" ,c);  //c=-1
     printf ( "feof(fp)=%d\n" , feof (fp)); //结果为1
     return  0;
}

c=99
feof(fp)=0
c=-1
feof(fp)=1



本文转自神ge 51CTO博客,原文链接:http://blog.51cto.com/12218412/1888412

相关文章
如何去掉字符串开头,结尾或者中间的空格及其他不想要的字符
去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。
|
14天前
|
弹性计算 运维 Shell
在文件开头写入内容
在文件开头写入内容
69 0
|
Shell
SHELL中从变量中截取后缀、文件名、目录名
SHELL中从变量中截取后缀、文件名、目录名
134 0
|
Java Maven
快速删除所有以.lastUpdate结尾的文件
快速删除所有以.lastUpdate结尾的文件
1189 0
编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔
编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔
替换 &开头。;结尾之间的内容。用空格代替他们
替换 &开头。;结尾之间的内容。用空格代替他们
|
程序员
代码中目录是否以分隔符结尾的再讨论
代码中目录是否以分隔符结尾的再讨论
58 0
目录字串最后都不要带目录分隔符
目录字串最后都不要带目录分隔符
106 0
|
C# Windows
C# 不能用于文件名的字符
原文:C# 不能用于文件名的字符 在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入/ 就可以看到windows 提示的不能作为文件名的字符 那么具体是包括哪些符号不能...
921 0