Блог пользователя Fefer_Ivan

Автор Fefer_Ivan, 14 лет назад, По-русски

Я думаю, каждый из нас, кто писал или пишет на С++, знаком со строкой 

freopen("input.txt", "rt", stdin);

А вопрос у меня следующий.

Почему "rt"? 

Сайт cppreference.com не дал мне ответа на этот вопрос. Более того, там даже нет "rt" как возможного значения параметра mode функции freopen. 

Теги c++
  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

P.S.

Я пишу  "r" все время. Все работает. Что я делаю не так?

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    "rt" наверное используют для симметрии к "rb".
    т.е. по идее rt означает открытие для чтения в текстовом режиме, а rb в бинарном.
    Но на пример в стандарте С++ 2003 года при упоминании fopen про rt не говорится, т.е. r - открытие в обычном режиме, а rb - в бинарном. t - скорее всего игнорится везде.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Ну я, вообще-то, на Си не пишу, но вот тут, вроде бы, хорошо объяснено:

    http://www.codenet.ru/progr/cpp/spru/freopen.php 

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Вообще, ключ 't' имеет смысл на платформах, которые кодируют перевод строки кодом, отличным от одного "\n". На Unix-подобных, например этот ключ не используется, ибо перевод строки - это просто "\n", а на Windows он нужен, т.к. перевод строки кодируется "\r\n".

И насколько я знаю, указание ключа "rt" не поможет программке на Linux автоматически правильно прочитать переводы строк в формате Windows. Т.е. обработку строк в таких случаях придется писать самому, или если очень лень, то использовать какую-нибудь специальную библиотечку.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
"t" это нестандартное расширение у MS и ряда других библиотек. Там есть возможность изменить установку по умолчанию -- файлы без указания режима открываются как двоичные (как это собственно и должно быть). С установками по умолчанию "t" не нужно.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    ссылка:

    http://msdn.microsoft.com/ru-ru/library/61dstksf.aspx

    http://msdn.microsoft.com/ru-ru/library/yeby3zcb.aspx