本帖最后由 冥顽 于 2016-6-28 18:13 编辑 //#include <stdio.h>
#include <iostream>
//#include <stdlib.h>
using namespace std;
int main()
{
FILE *P_stream; //定义文件类型的指针
fopen_s(&P_stream,"1.txt","r"); //打开文件将文件地址赋给P_stream指针变量
if(P_stream==NULL) //判断文件是否成功打开,如果成功打开P_stream指向文件首地址,如果打开失败则输出提示信息并退出 程序
{
fprintf(stdout,"文件打开失败,请确认文件是否存在!\n");
exit(0);
}
fseek(P_stream,0,SEEK_END); //将文件内部指针移动到文件末尾以计算文件的大小,否则ftell获取不到文件大小
size_t filesize=ftell(P_stream); //定义存储文件大小的变量
//ftell函数返回文件大小赋给变量filesize
//rewind(P_stream); //和下一条语句功能一样
fseek(P_stream,0,SEEK_SET); //将文件内部指针移动到文件开头
char *str=NULL; //定义指向新申请内存的指针
str=new char[filesize]; //开堆
fread(str,sizeof(char),filesize,P_stream); //从P_stream读取文件内容
fclose(P_stream); //关闭P_stream3
P_stream=NULL; //将P_stream指针设置为空
int count=0; //定义一个整形变量保存换行符计数
for(unsigned int i = 0;i<filesize;i++) //循环输出文件内容
{
if(str[i]=='\n'||str[i]=='\r') //判断字符是否为换行符,如果是换行则计数加1,
{ //并输出换行,换行符不单独输出,最后会输出一串乱码(用二进制方式打开文件就不存在此问题)
count+=1;
cout<<str[i];
}
else if(i<=(filesize-count)) //判断文件结束,文件大小,减掉换行符数量
{
cout<<str[i];
}
else
{
cout<<"\n";
break;
}
}
//cout<<str<<endl;
delete []str;
//cout<<endl;
system("pause");
}
程序运行效果
不单独判断换行输出的效果
文件里面存在换行符,每两个换行符就会造成输出尾部输出一个乱码,单独判断换行把换行单独输出就没有这问题
想知道是什么原因 |