|
发表于 2016-6-28 18:06:04
|
显示全部楼层
本帖最后由 DarkSE 于 2016-7-2 11:31 编辑
- //#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[i]; // 是说这么输出出现乱码吗?
- }
- //cout<<str<<endl;
- delete []str;
- //cout<<endl;
- system("pause");
- }
复制代码
原因是:windows下,文本文件的\n会转化为0d 0a,所以会占2个字符,而你输出的时候用了是一个字符,所以会剩下一些来输出乱码 |
|