fprintf在txt文件中写入0D 0D 0A而不是0D 0A

加布里埃尔·维尼修斯(Gabriel Vinicius)

我正在尝试使用c编写示例文本,但是我的代码做错了。
代码在下面

#include <stdio.h>

int main(){
FILE *ptr;
char c[8]={65,66,67,13,10,67,68,69};
int count;
ptr = fopen("write.txt","w");
for(cont = 0 ; cont < 8; count++){
     fprintf(ptr, "%c", c[count]);
}
return 0;
}

文本应该是
ABC
CDE,

但是当我在十六进制编辑器中打开它时,它显示的是:

41 42 43 0D 0D 0A 43 44 45 

编辑:我把wb而不是w和它工作

紫罗兰色

以文本模式打开文件可以使您以某种方式转换数据,以符合基础环境的要求。

例如,在Windows中,以文本模式打开文件可能意味着换行符的C概念与文件中\nCRLF字符序列相对应。

因此,当您编写13CR)时,它照原样消失。编写10LF)时,这是换行符\n,并转换为Windows行尾CRLF这就是为什么您0D 0D 0A在文件中看到的原因

如果要避免这种转换,只需以二进制模式(a)打开文件

ptr = fopen("write.txt", "wb");

顺便说一句,这也是一个好主意:

  • 检查可能无法查看的函数是否确实失败(例如,fopen返回NULLfprintf返回一个以外的任何值(在这种情况下));
  • 完成处理后,显式关闭文件;
  • 让C在可能的情况下自动调整数组大小(char c[] = {...});
  • 使用sizeof(c)而不是“魔术”数8

(a)的有关部分ISO C117.21.2 Streams /2

文本流是由行组成的有序字符序列,每行由零个或多个字符加上一个终止换行符组成。最后一行是否需要终止换行符是实现定义的。可能必须在输入和输出上添加,更改或删除字符,以符合在主机环境中表示文本的不同约定。因此,流中的字符与外部表示中的字符之间不需要一一对应。

但请记住,按照/3同一部分的规定,即使二进制数据也可能不会被修改

二进制流是可以透明记录内部数据的有序字符序列。在相同的实现下,从二进制流中读取的数据应与先前写入该流中的数据进行比较。但是,这样的流可以在流的末尾附加实现定义数量的空字符。

我个人唯一见过该子句起作用的地方是在System z大型机上,必须记录固定长度的记录大小。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何用PHP用%0D%0A替换新行

如何使用vba结束时不使用[0D 0A(VBCRLF)]写入文本文件

无法识别01 0D的OBD响应

不要在我的终端中解释回车符(`\ 0D`)

为什么Numpy中的0d数组不视为标量?

python / numpy ValueError:预期的1D或2D数组,取而代之的是0D数组

汇编中的int 10h,ah作为0d始终返回0作为鼠标指针下方像素的颜色

int64 vs array(int64, 0d, C) in numba

是否有获取0D numpy子数组的规范方法?

Python,numpy;如何最好地处理可能的0D数组

加载网址列表时从给定的输入中省略%0D

Rails ActionMailer将回车符(= 0D)添加到html中每一行的末尾

ifstream不读取文件中存在的“ 0a”字节

从文件中读取 url 时 python ads /%0A

<错误>:ImageIO:PNG [5C] [30] [0D] I:无效的块类型是什么意思?

Python-无法正确读取十六进制0A

Ruby:Net :: HTTP解析在末尾添加%0A

为什么hexdump在python输出的开头显示0a?

Python Word Vect numpy 数组,在保存到 csv 时出现维度错误,预期为 1D 或 2D 数组,而是得到 0D 数组

有没有一种pythonic方式将标量和0d数组更改为1d数组?

ANSI转义0x1b [0A和其他0值代码应该做什么?

bash 重定向到文件會增加意外的 0A 字節

在NODE.JS中,换行代码(%0A)将解码回什么字符?

Scrapy将%0A添加到URL,导致它们失败

URL参数:换行符%0A导致JSON.parse阻塞

GPG 在尝试导入公钥时给出无效数据包 (ctb=0a) 错误

在 snmp 中请求 cdpCacheAddress 时,IP 地址未返回,而是显示 c0:a8:0a:xX

如何在没有 02 0A 06 0E 限制的情况下更改 MAC 地址

星号和x100p-错误:wcfxo:空间不足,无法用0a写入寄存器05