当写入以文本模式打开的文件而不是以二进制模式打开的文件时,会发生什么转换?特别是在MS Visual C中.

unsigned char buffer[256];
for (int i = 0; i < 256; i++) buffer[i]=i;
int size  = 1;
int count = 256;

二进制模式:

FILE *fp_binary = fopen(filename, "wb");
fwrite(buffer, size, count, fp_binary);

与文本模式相比:

FILE *fp_text = fopen(filename, "wt");
fwrite(buffer, size, count, fp_text);

推荐答案

我相信大多数平台在处理流时会忽略"t"选项或"文本模式"选项.然而,在windows上,情况并非如此.如果在:MSDN处查看fopen()函数的描述,您将看到指定"t"选项将产生以下效果:

  • 换行符("\n")将在输出时转换为"\r\n"序列
  • 回车/换行序列将在输入时转换为换行.
  • 如果文件是以追加模式打开的,则将判断文件末尾是否有ctrl-z字符(字符26),并在可能的情况下删除该字符.它还会将该字符的出现解释为文件的结尾.这是CPM时代的一个不幸的遗留物(关于父母的罪过一直到他们的子元素第三代或第四代).与前面陈述的观点相反,不会追加ctrl-z字符.

C++相关问答推荐

从STdin读写超过4096个字节

在32位处理器上优化53—32位模计算>

如何将字符串argv[]赋给C中的整型数组?

如何跨平台处理UTF-16字符串?

对重叠字符串使用MemMove

如何计算打印二叉搜索树时每行所需的空间?

用C++从外部ELF符号读取值

用C语言计算文本文件中的整数个数

如何使用libgpio(d)为Raspberry Pi编译C程序?

使用%f格式说明符打印整数值

Valgrind用net_pton()抱怨

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

带有数组指针的 struct 在print_stack()函数中打印随机数

unions 的原子成员是个好主意吗?

变量值不正确的问题

STM32:代码的执行似乎取决于它在闪存中的位置

C 语言中霍尔分区的快速排序算法

将数组返回到链表

Zig 中 C 的system函数的惯用替代方案

M1 Mac 上的 jmp_buf 如何解码?