【发布时间】:2018-06-05 22:12:34
【问题描述】:
int main(){
FILE *fptr=fopen("clients.dat","wb");
char a='c';
//int b=5;
fwrite(&a,sizeof(char),1,fptr);
}
为什么当我运行这个程序时“clients.dat”不是二进制文件。但是如果我注释 char 并取消注释 int 那么clients.dat 文件是二进制文件。它在结构中是相同的。如果 struct 中只有 char 则不创建二进制文件,但如果有 char 和其他数据类型则创建二进制文件。
谁能写出原因?
【问题讨论】:
-
那是你的代码吗? html
<br>建议您复制它。请显示输出文件的转储。 -
是的。实际上我做到了,因为当我在没有
的情况下编写它时显示代码混乱 -
为什么你破坏了我的格式修正?回滚到您发布的代码。
-
不存在“二进制”或“文本”文件。文件是文件,字节是字节。这是人们选择解释使文件成为某种类型的那些字节的方式。在 C 中,当您以“b”模式打开文件时,这意味着您写入的任何字节都将按原样进入文件:如果您写入“c”,它将得到一个“c”。在文本模式下,库可能会添加或更改一些字节,尤其是行尾之类的内容,以符合系统对“文本”的概念,但文件本身仍然只是字节。
-
您打开文件的程序(可能是文本编辑器)将
'c'字符视为文件中出现的唯一字节,并认为该字节代表c字符您的平台的默认字符集,并得出该文件实际上是文本文件的正确结论。在编写int a = 5时,构成int的所有字节都不代表您平台字符集中的有效字符,从而导致程序告诉您该文件是“二进制文件”。
标签: c binary char binaryfiles