求大神详解关于 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 编辑 ]