读书人

内容是1个字母的文件的大小为2字节?该

发布时间: 2013-10-21 17:02:52 作者: rapoo

内容是1个字母的文件的大小为2字节?
linux环境。
新建空白,0字节;
打开,写个数字1,保存退出,大小为2.
命令:xxd test
0000000: 310a 1.

疑问,

我的想法是,linux下 <CTRL+D> 在行首才代表EOF,于是数字1后面由系统补上1字节的换行符,接着再补上 1字节 的EOF。
大小为3。

事实上是,只补了个换行,这样我就搞不清楚到底怎么回事了。

谢谢知道的前辈朋友讲解下。谢谢了!
[解决办法]
EOF不存在文件中。。。
[解决办法]
0a是换行符(还是回车符,有点记不清了),这是因为你每行都有一个这样的标识,如果你换行后有2行字符,则第一行则必然同时包括 换行符 和 回车符,也就是比预想的要多2个字节,只有一行的话,那是要多一个字符的。就是换行符(或者回车符)
[解决办法]

引用:
EOF不存在文件中。。。


EOF 是不存在对应的 字符的,至于如何判断遇到了 EOF, 应该与 os 有关
[解决办法]
Linux下vi编辑一个文件后并保存后,会保证最后一个字符是0x0a,也就是保证文件以换行符结尾。
[解决办法]
引用:
2l:那程序是怎么检测EOF的,难道是操作系统检测到后补上的?
3l:内容我知道,我想问为什么。
谢谢了。

文件中是可以存在 '\0'的
按字节读取的话,读取到结束怎么办? 返回'\0'的话你是不知道是读取了内容还是文件结束?
于是就返回一个特殊的标记EOF来表示读取到结尾了。。。
[解决办法]
引用:
Linux为什么要自动添加0x0a上去呢?

惯例。这可方便很多事情。
[解决办法]
推荐使用WinHex软件查看文件或内存中的原始字节内容。

[解决办法]
引用:
还是有问题,Linux为什么要自动添加0x0a上去呢?


当你 cat file1 file2 的时候,如果 file1 不以换行符结尾,试试会发生什么情况?
提示:cat 不会每输出完一个文件自动再输出一个换行符

C/C++包含头文件时,如果有一个头文件不以换行符结尾,也可能导致编译不通过,原因参考上面 cat 的输出结果。

读书人网 >C语言

热点推荐