|  | 
 
 发表于 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个字符,而你输出的时候用了是一个字符,所以会剩下一些来输出乱码
 | 
 |