| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 637 人关注过本帖
标题:求大神详解关于 EOF 和‘\032 ’和文件结尾的问题
取消只看楼主 加入收藏
hutianlun
Rank: 2
等 级:论坛游民
帖 子:21
专家分:13
注 册:2013-3-28
结帖率:100%
收藏
已结贴  问题点数:35 回复次数:0 
求大神详解关于 EOF 和‘\032 ’和文件结尾的问题
Ctrl+Z是一个字符,在ASCLL字符集里为十进制26位,
疑问1:ASCLL中'26'不就是Ctrl+Z,那他到底是不是文件结尾?如果是文件结尾,那EOF是什么,EOF不是也是文件结尾吗?如果他们同属于文件结尾,那字符Ctrl+Z其实值也为-1??  在<stdio.h>中 关于EOF的定义#define EOF     (-1)
在C Primer Plus P366面有这样一段话,“很多MS-DOS编辑器使用字符CTRL+Z标识文本文件的结尾,如果以文本模式打开这样的文件,C可以认出这个字符是标识文件结尾的字符。可是如果以二进制模式打开这样的文件,只会把Ctrl+Z当作文件中的一个字符。
疑问2:为什么我使用下面的代码并以"r"作为fopen的读取方式时检测不到‘26’,并且以"rb"但是以读取方式时还是检测不到‘26’。 但EOF作为循环条件时检测会成功,
既然二进制模式把Ctrl+Z当作文件中的一个字符,为什么用循环却检测不到Ctrl+Z?

程序代码:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
  FILE *fp;
  char ch;

 if ((fp=fopen("1.txt","rb"))==NULL)
    printf("hehe");

while( (ch=getc(fp))!='\032' )
{ 

      putc(ch,stdout);

 }
  return 0;
}
文本.rar (442 Bytes)
代码中的1.txt就在压缩包中,环境win7 32位


[ 本帖最后由 hutianlun 于 2014-5-26 20:44 编辑 ]
搜索更多相关主题的帖子: 文本文件 二进制 编辑器 十进制 
2014-05-26 20:34
快速回复:求大神详解关于 EOF 和‘\032 ’和文件结尾的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020801 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved