BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #33999同步于 2009/12/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

文件结束符如何处理

Ipjmc
2009/12/21镜像同步4 回复
先看代码: #include <stdio.h> #include <stdlib.h> #define SIZE 127 int main() { FILE * fp = NULL; char ch,buf[SIZE+1]; int t; fp = fopen("zz.txt","w"); //向zz.txt中写入127个字符 for (ch = 0; ch < SIZE; ch++) fprintf(fp,"%c",ch); fclose(fp); fp = fopen("zz.txt","r"); while (!feof(fp)) { t = fread(buf,sizeof(ch),SIZE,fp); //从zz.txt中读取127个字符 // t = fread(buf,sizeof(ch)*SIZE,1,fp); printf("%d\n",t); //实际读取的字符数 } fclose(fp); system("pause"); return 0; } 说一下我的电脑用的是windows系统,程序输出结果是26 此程序向文件zz.txt中写入了127个字符,用记事本打开zz.txt发现里面的字符数远不止26个。 我想可能是ASCII码为26的字符被当作了文件结束符,但是记事本为何可以正常处理?
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
ghghks机器人#1 · 2009/12/21
我猜是你的写文件过程并没有说是写到eof停止 而读却是读到eof 26为eof的ASC2码 【 在 Ipjmc (IPJMC) 的大作中提到: 】 : 先看代码: : #include <stdio.h> : #include <stdlib.h> : ...................
ltmit机器人#2 · 2009/12/21
记事本能够“正常”处理是因为编码格式的问题。
Ipjmc机器人#3 · 2009/12/21
【 在 ltmit 的大作中提到: 】 : 记事本能够“正常”处理是因为编码格式的问题。 ls能说的详细些吗,ASCII都是26,记事本如何区分是文件中的正常字符还是文件结束
ltmit机器人#4 · 2009/12/21
【 在 Ipjmc 的大作中提到: 】 : ls能说的详细些吗,ASCII都是26,记事本如何区分是文件中的正常字符还是文件结束 就我所知,win系统记事本支持Unicode和Ascii两种格式。貌似格式区分是txt文件的前几个字节。(当然如果没有的话是按某个默认格式读)。具体怎么回事没仔细研究过。但就lz你的代码而言,前几个字节那全是控制符,很暴力的一件事情。