返回信息流先看代码:
#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的字符被当作了文件结束符,但是记事本为何可以正常处理?
这是一条镜像帖。来源:北邮人论坛 / cpp / #33999同步于 2009/12/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
文件结束符如何处理
Ipjmc
2009/12/21镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
我猜是你的写文件过程并没有说是写到eof停止
而读却是读到eof
26为eof的ASC2码
【 在 Ipjmc (IPJMC) 的大作中提到: 】
: 先看代码:
: #include <stdio.h>
: #include <stdlib.h>
: ...................
【 在 ltmit 的大作中提到: 】
: 记事本能够“正常”处理是因为编码格式的问题。
ls能说的详细些吗,ASCII都是26,记事本如何区分是文件中的正常字符还是文件结束
【 在 Ipjmc 的大作中提到: 】
: ls能说的详细些吗,ASCII都是26,记事本如何区分是文件中的正常字符还是文件结束
就我所知,win系统记事本支持Unicode和Ascii两种格式。貌似格式区分是txt文件的前几个字节。(当然如果没有的话是按某个默认格式读)。具体怎么回事没仔细研究过。但就lz你的代码而言,前几个字节那全是控制符,很暴力的一件事情。