假设我使用c语言以写入模式打开文本文件。现在我添加一些文本数据。
1.内部如何将数据存储在文件中?每个字符是否存储为8位ascii代码?
我们永远不会在写入文件结束时添加EOF,我们使用fclose()来关闭文件。
2.然后如何将EOF添加到文件中?它是如何存储在文件中的?
当我们使用getchar()读取该文件的字符时,我们能够检测到EOF。现在EOF if是ctrl + z,这些是2个字符^ z保存在文件末尾。所以getchar()会得到^然后是z。所以,
3. getchar()如何检测EOF?
答案 0 :(得分:1)
通常C将使用Latin-1或其他单个字节 编码,但应该可以使用UTF-8语言环境设置。 请注意,大多数C字符/字符串处理例程都不会 正确处理UTF-8或任何其他多字节编码 - 您必须使用特殊库。
这取决于所使用的操作系统,但大多数都只是存储 一个连续的字符流,带有一个行尾(CR-LF in Windows,\ n在Unixy系统中)字符标记行的结尾 (你必须明确地把它放在那里)。
某些操作系统(如MS-DOS)可能会明确写入EOF 字符到文件的末尾,但大多数都没有。他们只是跑 离开文件末尾并报告EOF状态。
见2.
答案 1 :(得分:1)
EOF
不是存储在文件中的字符,它是您在读取文件时获得的特殊返回码。文件I / O系统知道文件中有多少个字符,因为它存储文件的确切长度。当您的程序尝试在最后一个可用字符之后读取字符时,文件I / O系统返回一个特殊值EOF
,该值超出char
的范围(因此该字符读取例如getchar()
等例程会返回int
而不是char
。)
Ctrl + Z 序列也不是EOF
字符。它是一个特殊的键序列,它告诉shell关闭与程序关联的控制台输入流。关闭流后,下一次读取将EOF
返回到您的程序。然而,重要的是要理解 Ctrl + Z 仅仅是由命令行处理器解释的键盘序列 - 与 Ctrl <相同/ kbd> + C 是一个告诉命令行处理器终止程序的序列。
最后,^Z
不是存储在文件中的两个字符,它是命令行生成的 Ctrl + Z 序列的屏幕表示处理器,用于直观地确认键盘序列已被接受。