C之文件结尾

  文件结尾在不同的操作系统上有可能不同,但一般都是如下两种中的一种:

  1、ctrl+z标志文件结尾:即通过一个内嵌的ctrl+z来标志文件的结尾,例如:

  Hello,I am MS.\n^Z

  2、利用文件大小表示结尾:这种方式下,操作系统存储文件的大小。例如,一个文件一共有1000字节,系统已经从中读取了1000字节,则这个文件已经到了末尾。目前,Unix使用这种方式标识文件结尾。

  C模拟文件结尾:

  先看如下代码:

#include<stdio.h>
int main(void){
    int ch;
    while((ch = getchar()) != ‘EOF‘){
        putchar(ch);
    }

    return 0;
}
       

代码其实很简单,就是一个回显的程序。其中的‘EOF‘字符是C中定义在stdio.h中的文件结束字符。现在运行它,会发现无论你输入什么,计算机都会在怒按下回车键后重新显示你的输入。

  那么怎么模拟文件结尾呢,这个不同的操作系统也不一样,在我的Linux环境下是Ctrl+D,Windows下好像是Ctrl+Z。重新运行上述程序,在家输入中按下Ctrl+D发现程序结束并显示了你在按下Ctrl+D之前的所有字符。

时间: 2024-08-06 00:21:19

C之文件结尾的相关文章

fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?

fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加"#include "stdafx.h""? vs开发时经常遇到没加stdafx.h头文件,解决办法就是吧预编译头去掉! fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加"#include "stdafx.h""?,布布扣,bubuko.com fatal error C1010: 在查找

ORA-03113:通信通道的文件结尾

问题: 用命令startup启动实例时,报错“ORA-03113:通信通道的文件结尾”. 解决: SQL> startup mount ORACLE 例程已经启动. Total System Global Area 835104768 bytes Fixed Size 2217952 bytes Variable Size 637536288 bytes Database Buffers 188743680 bytes Redo Buffers 6606848 bytes 数据库装载完毕. SQ

Oracle 11.2.0.1的一个Bug,客户端报ORA-03113: 通信通道的文件结尾

半小时前,一个项目反馈应用系统部分功能报错,ORA-03113: 通信通道的文件结尾.好像是个常见的错误. 异常信息:ORA-03113: 通信通道的文件结尾 进程 ID: 2392 会话 ID: 298 序列号: 46826 检查了归档日志未发现异常,检查Oracle日志时发现对应ORA-03137错误,经查阅网上资料,属于Oracle的bug,God,竟然隐蔽在ORA-03113后面. Errors in file d:\app\administrator\diag\rdbms\fssc\f

C++之检测文件结尾

当使用文件作为输入流时,为了确保适时的结束文件读取操作,程序要靠检查文件尾来判断该何时停止读取.常用的检查文件尾方法有两种: 两种方式均已将 fin 与文件关联,即 均已声明 fin 输入流,并已调用 open 成员函数打开了文件.第一种: 该方式可以要求程序从文件中连续读取数字,直到没有更多的数字可供读取为止.代码如下: 1 int next; 2 while(fin >> next){ 3 //用户代码 4 } 第二种: 该方式利用每个输入文件流都有的 eof 成员函数来判断何时读完文件的

fatal error C1010: 在查找预编译头时遇到意外的文件结尾

错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加"#include "stdafx.h""? 错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束.没有找到预编译指示信息的头文件"stdafx.h". (因为工程中的每个cpp文件属性默认都是使用预编译头(/YU)的,但是添加的第三方文件并没有 #inc

VC研究: 使用tinyxml编译出现“fatal error C1010: 在查找预编译头指令时遇到意外的文件结尾”

向项目添加tinyxml用于解析xml内容,总体来说tinyxml还是很方便. 编译时提示"fatal error C1010: 在查找预编译头指令时遇到意外的文件结尾" 分析: 此错误发生的原因是VC编译器在寻找预编译头文件(默认#include "stdafx.h")时,文件未预期结束.也就是没有找到默认的预编译头文件"stdafx.h".而VC中创建每一个cpp默认都会加上"stdafx.h",但添加的第三方类库(比如t

feof()和EOF的用法—— C中文件结尾的判断

查看 stdio.h 可以看到如下定义: #define EOF (-1) #define _IOEOF 0x0010 #define feof(_stream) ((_stream)->_flag & _IOEOF) 由此可以看出,这两种方式的原理是不同的. 在这里先说下EOF和feof()这个两个宏定义,在我们学的课本中有这样的描述. EOF是不可输出字符,因此不能在屏幕上显示.由于字符的ASCII码不可能出现-1,因此EOF定义为-1是合适的.当读入的字符值等于EOF时,表示读入的已不

fatal error C1010: 在查找预编译头时遇到意外的文件结尾 (转)

错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "stdafx.h"”? 错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束.没有找到预编译指示信息的头文件"stdafx.h". (因为工程中的每个cpp文件属性默认都是使用预编译头(/YU)的,但是添加的第三方文件并没有 #include "

Oracle错误——ORA-03113:通信通道的文件结尾

我的Oracle数据库是去年11月份安装的,然后安装好之后配置了一下,那个时候是正常的,没有什么问题,但是后来我就一直没有用自己本地的Oracle,使用的PL/SQL一直连的是同事的机子,然后今天突然想在自己的机子上做些测试,PL/SQL居然一直连不上,提示了下面这个错误. 提示ORA-03113:通信通道的文件结尾 进程 ID :0 会话 ID:0 序列号:0 之后就是一系列的度娘谷歌论坛等等折腾,折腾了良久,终究是给解决了. 解决方法: 第一步: sqlplus / as sysdba sh