Лидеры рейтинга

ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

323

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Советник

278

Россия, Санкт-Петербург


ID: 400669

epimkin

Профессионал

254


ID: 137394

Megaloman

Мастер-Эксперт

122

Беларусь, Гомель


ID: 405239

al4293189

1-й класс

92


ID: 325460

CradleA

Мастер-Эксперт

76

Беларусь, Минск


ID: 226425

Konstantin Shvetski

Модератор

49

Россия, Северодвинск


8.9.8

01.08.2021

JS: 2.9.16
CSS: 4.5.14
jQuery: 3.6.0
DataForLocalStorage: 2021-08-02 12:16:01-standard


Создание программ на языках C и C++.

Администратор раздела: CradleA (Мастер-Эксперт)

Консультация онлайн # 144425

Раздел: С / С++
Автор вопроса: Warobushek
Дата: 19.09.2008, 20:49 Консультация закрыта
Поступило ответов: 3

В одной книге по Си прочитал, что использование "wt" при открытии файлов может привести к непереносимости программ.
Там написано, что нужно использовать "w" вместо этого.
-----------
Так ли это?

Ответ # 229706 от Виктор Пырлик
Здравствуйте, Warobushek!

Не «вместо».. первый параметр, в данном случае это w — указывает что сделать с файлом, спецификатор же t определяет как открыть файл, в данном случае — в текстовом режиме.
Обычно, не задают t т.к. Предполагается что по умолчанию открывается в текстовом режиме (что определяется переменной _fmode и режимом, устанавливаемым по умолчанию). Но наедятся на это не следует. Хотя, всё же явно задают только бинарный режим — b .
Я бы советовал использовать и t и b указывая явно. Хуже от этого не станет. А на переносимость программ это не влияет.

URL >> Описание функций C (Си) / C++ - fopen

Виктор Пырлик

Посетитель
19.09.2008, 21:03
Ответ # 229716 от Хватов Сергей
Здравствуйте, Warobushek!

Конечно, приведёт. Это опять чья-то самодеятельность. В стандарте "t" нет вообще. Цитирую §7.19.5.3 ISO/IEC 9899:TC2:

Приложение:


Хватов Сергей

Академик
19.09.2008, 22:15
Ответ # 229730 от Provisor
Здравствуйте, Warobushek!
Да это так. Дело в том, что для перевода строки в разных ОС используются разные символды/сочетания символов: LF (0x0A) — в системах UNIX, CR (0x0D) — в системах MacOS, CR LF (0x0D 0x0A) — в системах DOS–Windows. Поэтому файл и не рекомендуется открывать в текстовом режиме.

Provisor

Посетитель
20.09.2008, 07:18
Мини-форум консультации # 144425
Warobushek

1

= общий =    20.09.2008, 12:33

to Виктор Пырлик && Хватов Сергей
Я в растерянности.. smile На что ориентироваться? Влияет или нет? Ответ Хватова Сергея более убедителен, т.к. ссылка на стандарт

to Provisor и все кто знает
А разве открытие файла в текстовом режиме не подразумевает замену сочетания символов перевода строки на единственный символ LF ('\n')
средствами стандартной библиотеки?

q_id

Хватов Сергей

Академик

ID: 20764

2

= общий =    20.09.2008, 13:27

В стандарте только сказано про текстовые и двоичные файлы. Он не оговаривает, чем отличается работа с текстовыми и двоичными файлами, но устанавливает, что по умолчанию (без "b") файл открывается в текстовом режиме. А в чём это выражается (преобразование CRLF в NL, игнорирование '\0' или даже перекодировка) - это уже реализация вольна решать сама. Например, в UNIX-ах вообще не делается никаких преобразований.

Виктор Пырлик

3

= общий =    20.09.2008, 13:28

Вы открываете без t - по умолчанию в текстовом режиме. И в какой ОС вы это откроете - не имеет значения.
Если вы открываете файл в Linux, который был создан и заполнен в Windows (например), то конечно управляющая последовательность будет другой.
Читая файл - вы не изменяете его. Если будите писать в него, то будет это делаться либо так, как принято в вашей ОС, либо так, как вы определили сами.
С другой стороны, открыв файл в бинарном режиме (допустим, у вас "по умолчанию" такой режим работает), вы конечно можете с ним работать - но всегда ли это то, что вам надо? Все равно, запись тех же строк будет выполнена по правилам данной ОС.. или, вы должны будите специально заботиться о том, что бы управляющая последовательность была такой, как вам надо. Режим работы определяется в первую очередь конкретной ситуацией.
К тому же, имеет значение и локаль, которая у вас стоит (для *nix).

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 119

CradleA

Мастер-Эксперт

Рейтинг: 76

Коцюрбенко Алексей Владимирович

Старший модератор

Рейтинг: 8

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0

Хватов Сергей

Академик

Рейтинг: 0