1 (изменено: Rumata, 2021-09-18 02:07:13)

Тема: C: fputc('\n') выводит CRLF

Прошу помощи знатоков C. Столкнулся с такой проблемой. Это самый минимальный кусок кода.


#include <stdio.h>

int main() {
	fputc('\n', stdout);
}

После компиляции под виндой этот код печатает именно CRLF (или \r\n) вместо ожидаемого LF (или \n). Совсем не специалист в C/C++ и совершенно не знаю, как победить. Возможно надо указать какие-то ключи компилятору.


>gcc --version
gcc (x86_64-posix-seh, Built by strawberryperl.com project) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


>del a.exe && gcc a.c && a | od -c
0000000  \r  \n
0000002

( 2 * b ) || ! ( 2 * b )

2

Re: C: fputc('\n') выводит CRLF

Не знаток. Осмелюсь предположить, что причина в режиме открытия выходного потока (нужен двоичный режим).

3 (изменено: Rumata, 2021-09-18 02:07:26)

Re: C: fputc('\n') выводит CRLF

Да, Вы правы. Спасибо за подсказку - она только подтверждает правильность моих находок. А ведь в Perl тоже есть такая фича. Мог бы и догадаться.

Вот так работает:


#include <stdio.h>
#include <fcntl.h>

int main() {
	setmode(fileno(stdout), O_BINARY);
	fputc('\n', stdout);
}
( 2 * b ) || ! ( 2 * b )