在Windows上
#include <stdio.h>
int main() {
putc('A',stdout);
putc('\r',stdout);
putc('\n',stdout);
}
输出
A<CR><CR><LF>
如何在不自动转换为CR LF的情况下将LF char写入stdout?
我需要它来制作简单的套接字流读取器到stdout。 我尝试过来自CodeGear的bcc32,mingw,tinycc都会产生相同的结果,将putc改为putchar,fputc,fwrite也无济于事。
答案 0 :(得分:11)
MSVC解决方案是:
#include <io.h>
#include <fcntl.h>
...
_setmode(1,_O_BINARY)
其他运行时可以提供C99解决方案或替代方式。编辑:我相信setmode([file number],O_BINARY)
起源于Borland Turbo C,而MS-DOS和Windows的其他编译器则模仿它。完成_前缀是为了保持名称空间的清洁,并且某些编译器可能不存在。
答案 1 :(得分:2)
文本文件将C字符'\n'
转换为输出结尾的本机行,并将输入结尾的本机行转换为单个'\n'
。
要获得所需的结果,您必须将stdout
更改为二进制文件流。
找到部分答案here。如果您有一个符合C99的库,请使用:
if (freopen(0, "wb", stdout) == 0)
...oops...operation failed...
将尝试将标准输出更改为二进制流。但是,在Windows上,“符合C99的库”可能是个问题。名义上,这是便携式(因为标准)答案。可能有一个特定于Windows的功能来完成同样的工作。
答案 2 :(得分:1)
#ifdef _WIN32
#include <fcntl.h>
#include <io.h>
#endif
#ifdef __BORLANDC__
#define _setmode setmode
#endif
#include <stdio.h>
static void binary_stdout(void) {
#ifdef _WIN32
_setmode(_fileno(stdout), _O_BINARY);
#endif
}
int main(void) {
binary_stdout();
printf("\n");
return 0;
}