首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >奇怪的文本模式文件输出行为

奇怪的文本模式文件输出行为
EN

Stack Overflow用户
提问于 2014-05-01 04:26:09
回答 2查看 110关注 0票数 0

考虑以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FILE * pOutFile;

unsigned char uid;

pOutFile = fopen("OutFile.bin","w") ;  // open a file to write

uid = 0x0A;

fprintf (pOutFile,"%c",uid);          // Trying to print 0x0A in to the file

但我在文件里得到的指纹是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0x0D 0x0A

这个0x0D是从哪里来的?我是不是遗漏了什么?我必须考虑什么才能防止这种情况发生。

更正: uidl是个错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-01 04:32:55

Windows文本文件希望用两个连续字符表示新行: 0x0D和0x0A。

在C中,新行由单个char: 0x0A表示。

因此,在Windows上,在C中,有两种打开文件的方法:文本模式或二进制模式。

在二进制模式下,当您编写LineFeed (0x0A)字符时,一个字节(0x0A)被附加到文件中。

在文本模式下,无论何时编写LineFeed (0x0A)字符,都会将两个字节(0x0D和0x0A)追加到文件中。

解决方案是使用"wb"以二进制模式打开文件。

票数 3
EN

Stack Overflow用户

发布于 2014-05-01 04:35:40

因为您在"w“模式下打开了文件,所以它处于文本模式,这意味着\n的文件(又名0x0a)被翻译成\r\n (回车和行提要)。如果您只希望0x0a写入文件,以二进制模式打开它("wb")。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23407646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文