当前位置:首页 > 开发语言/框架 > C语言

文件读取的文件结束符解决办法

优良自学吧提供文件读取的文件结束符解决办法,文件读取的文件结束符我有一段程序为什么在windows下 和 linux下运行的结果不一样? 第一个不同点是 cnt的值不一样。 第二个不同点输出不一样。 我的文件是abc.txt 里面手敲了abcde&nbs

文件读取的文件结束符
我有一段程序为什么在windows下 和 linux下运行的结果不一样?
第一个不同点是 cnt的值不一样。
第二个不同点输出不一样。
我的文件是abc.txt 里面手敲了abcde 没有敲换行符
我知道windows下和linux下对于换行符的处理不一样,可是我的文本文件里根本没有打换行符。

在windows下运行 结果是
5
edcba
在linux下运行 结果是
6

edcba
对于第一个结果 我不太懂windows的结果 因为 文件虽然有5个字符 但是还有一个文件结束符 所以最后应该是6个字符
对于第二个结果 我不懂linux的结果 就算要输出文件结束符 为什么会输出一个换行
还有一点SEEK_END到底是停在最后一个有效字符的结尾 还是最后一个有效字符下一个文件结束符的结尾 求大神指导?

#include <stdio.h>
#include <stdlib.h>
int main( int argc , char* argv[] )
{
FILE* pfile = NULL;  // 文件指针
int cnt = 0;              // 文件字符数
char ch = 0;                // 读取的文件字符
int i = 0;                       // 循环变量

// 打开文件
pfile = fopen( "abc.txt" , "r" );
if( !pfile )
{
fprintf( stderr , "cant not open the file !\n" );
}

// 设置文件指针
fseek( pfile , 0L , SEEK_END );

        // 获取文件中字节数
cnt = ftell( pfile );
printf( "%d\n" , cnt );

        //倒序输出
for( i = 1 ; i <= cnt ; ++ i )
{
fseek( pfile , -i , SEEK_END );
ch = fgetc( pfile );
printf( "%c" , ch );
}
printf( "\n" );

// 关闭文件
fclose( pfile );

return 0;
}

------解决思路----------------------
对于第一个结果 我不太懂windows的结果 因为 文件虽然有5个字符 但是还有一个文件结束符 所以最后应该是6个字符
文件结束符,根本就不会存在文件里。

对于第二个结果 我不懂linux的结果 就算要输出文件结束符 为什么会输出一个换行
Linux下的文本编辑器,会自动加上换行符


(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢