为什么printf创建Windows行尾?

dit*_*lav 3 c printf mingw

因此,我试图复制(和以后修改).ppm文件。我在使用mingw g ++的Windows 10上。原始文件仅是LF,但使用我的程序创建的文件具有CRLF,该文件会破坏.ppm文件。我在任何地方都没有做,但仍然可以输出。

FILE *fp;
FILE *dest;

char magicNumber[3];
int width, height, depth;
unsigned char red, green, blue;
unsigned char* buff;

printf("Hello, World!\n");


fp = fopen("lenna.ppm", "r+");

fscanf(fp, "%s", magicNumber);
fscanf(fp, "%d %d %d", &width, &height, &depth);
printf("%s %d %d %d nums\n", magicNumber, width, height, depth);


dest = fopen("lena2.ppm", "w+");
fprintf(dest, "%s\n%d %d\n%d", magicNumber, width, height, depth);
Run Code Online (Sandbox Code Playgroud)

结果是

在此处输入图片说明

为什么?

我只想有LF。我怎么做?

Bar*_*chs 6

以二进制模式打开文件:

fopen("lena2.ppm", "wb+");
Run Code Online (Sandbox Code Playgroud)

从文档:

在文本模式下,回车换行符组合在输入时转换为单个换行符,换行符在输出时转换为回车符组合。