当写入以文本模式打开的文件而不是以二进制模式打开的文件时,会发生什么转换?特别是在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++相关问答推荐

判断数组是否存在于一组数组中

在 Macbook M1 上为 Tensorflow 安装 C API

使用 .* 宽度说明符调用 sprintf 时出现奇怪的警告

在没有辅助函数的情况下转换函数指针参数

是否有更高性能的 powf(10,floorf(log10f(x))) 实现

DirectX11 与多视频适配器 (GPU) PC

在 C 中浮点到二进制

16 位 x86 MS-DOS 实模式下的分段远指针分配

C中偶数数组的递归

union无法解码字节数组

假设指向同一个变量的两个指针是非法的/UB,为什么 C 编译器不能优化更改 const 指针的值?

如果缺少 const char* 数组初始化逗号,则生成编译器警告

升级到 Catalina 10.15 后无法在 Mac 上编译 C 程序

项目中包含程序集文件时,来自 mmap 的意外 exec 权限

对平方数字求和时是否需要明确处理负数或零?

为什么不鼓励静态链接 glibc?

程序是 32 位还是 64 位意味着什么?

C/C++ 中的 const 数组和静态 const 数组有什么区别

如何检测 C 代码(需要'extern C')是否在 C++ 中编译

如果不在内存中,表达式和常量存储在哪里?