【问题标题】:Why i can't write char to binary file in C programming?为什么我不能在 C 编程中将 char 写入二进制文件?
【发布时间】: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


【解决方案1】:

您正在写入以“wb”模式打开的现有文件,which will overwrite the existing contents of the file。因此,您的单个字符 'c' 被写入文件的开头,无论之前的内容是什么,现在它都是您文件中的唯一内容。

至于为什么它不再被认为是二进制的,那是因为'c' 是一个可打印的字符。

【讨论】:

  • 如果我将模式更改为 ab 或 rb+ ,它仍然是一样的。但我需要将此字符写入二进制文件
  • @mirzemehdi 所有文件都是二进制文件;即一个字节序列。如果文件中的所有字节都代表可打印字符或空白字符,许多程序会将该文件视为“文本文件”。您的文件仅包含一个字节,并且它具有与可打印字符相同的值,因此这些程序将声称或假定它是文本。但是,如果任何程序想要将其视为二进制文件并仅读取该字节,它仍然可以,并且会得到您输入的值。
猜你喜欢
  • 2020-08-10
  • 2013-07-16
  • 1970-01-01
  • 2016-02-29
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多