读取txt的问题

fztfztfzt 2014-10-30 02:33:33
void Read()
{
FILE *file = fopen("abc.txt","r");
fseek(file,0,SEEK_END);
long n = ftell(file);
;//去掉最后的回车换行
char *list =new char[n+1];
rewind(file);
fread(list,sizeof(char),n,file);
list[n]='\0';
cout<<list;
}

上面的代码,如果txt有多行,且最后有换行的话读出的最后会有乱码,没换行则正常
...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fztfztfzt 2014-10-30
  • 打赏
  • 举报
回复
引用 1 楼 xpdavis 的回复:
你要随机读取的话,就用二进制来打开 void Read() { FILE *file = fopen("abc.txt","rb"); fseek(file,0,SEEK_END); long n = ftell(file); ;//去掉最后的回车换行 char *list =new char[n+1]; rewind(file); fread(list,sizeof(char),n,file); list[n]='\0'; cout<<list; }
引用 2 楼 zhao4zhong1 的回复:
不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
fseek是按二进制读取的,回车0d 0a会读成2个字符(回车存时就是存成0d 0a ),但是以文本形式打开时,fread将0d 0a 读成1个字符,所以会多读几个内存,出现乱码,就是这样吧
赵4老师 2014-10-30
  • 打赏
  • 举报
回复
不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
铖邑 2014-10-30
  • 打赏
  • 举报
回复
你要随机读取的话,就用二进制来打开 void Read() { FILE *file = fopen("abc.txt","rb"); fseek(file,0,SEEK_END); long n = ftell(file); ;//去掉最后的回车换行 char *list =new char[n+1]; rewind(file); fread(list,sizeof(char),n,file); list[n]='\0'; cout<<list; }

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧