【问题标题】:Using fwrite in Visual C++ 2005在 Visual C++ 2005 中使用 fwrite
【发布时间】:2013-05-09 10:20:09
【问题描述】:

我习惯使用 fwrite 将缓冲区的内容写入 gcc 中的文件。但是,由于某种原因,fwrite 在 Visual C++ 2005 中似乎无法正常工作。

我现在正在做的是将文本文件转换为二进制文件。该程序在前 61 行运行良好,但在第 62 行,它在输出二进制文件中插入了一个 0x0d。基本上,它变成了原版

12 0a 00

12 0d 0a 00

我检查了缓冲区,内容是正确的,即

buffer[18] = 0x12, buffer[19] = 0x0a, buffer[20] = 0x00

我尝试将此缓冲区写入文件

fwrite(buffer, 1, length, fout)

其中length是缓冲区内容大小的正确值。

这发生在我身上一次,我必须将我的代码从 fwrite 更改为 WriteFile 才能正常工作。我的输出中插入 0x0d 是否有原因?我可以解决这个问题,还是必须尝试改用 WriteFile?

【问题讨论】:

    标签: visual-c++ file-io fwrite


    【解决方案1】:

    问题是因为文件已经以文本模式打开,所以它正在将它看到的每个换行符转换为换行符+回车符序列。

    当您打开文件时,通过在文件模式上使用 b 限定符指定二进制模式:

    FILE *pFile = fopen(szFilename, "wb");
    

    在VC++中,如果文件模式中没有给出tb,则默认翻译模式由全局变量_fmode定义。这可以解释编译器之间的差异。

    在读取二进制文件时也需要这样做。在文本模式下,回车-换行组合在输入时转换为单个换行符,换行符在输出时转换为回车-换行组合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多