Фортран отформатировал IO и нулевой символ - PullRequest
0 голосов
/ 27 июня 2018

Интересно, как будет вести себя ввод / вывод Фортрана в случае символа NULL ACHAR(0).

Фактическая задача - заполнить файл ASCII блоками, состоящими ровно из восьми символов. Строки считываются из двоичного файла и могут содержать непечатаемые символы.

Я пробовал с gfortran 4.8, 8.1 и f2c. Если в строке есть символ NULL, спецификатор формата FORMAT(A8) делает , а не записывает восемь символов.

Попробуйте следующий код F77:

c Print a string of eight character surrounded by dashes
100   FORMAT('-',A8,'-')
c Works fine if empty or any other combination of printing chars
      write(*,100) ''
c In case of a short sting blanks are padded
      write(*,100) '345678'
c A NULL character does something I did not expect
      write(*,100) '123'//ACHAR(0)//'4567'
c Not even position editing helps
101   FORMAT('-',A8,T10,'x')
      write(*,101) '123'//ACHAR(0)//'4567'
      end

Мой вывод:

-        -
-  345678-
-1234567-
-1234567x

Это ожидаемое поведение? Любая идея, как получить вывод шириной восемь символов в любом случае?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

При использовании дескриптора редактирования A8 ширина поля равна восьми. Для вывода будет записано восемь символов.

В нашем примере это не написание символов, которые противоречат вашим ожиданиям, а то, как они отображаются вашим терминалом.

Вы можете проверить вывод дальше с помощью таких инструментов, как hexdump, или вы можете записать во внутренний файл и посмотреть произвольные подстроки.

0 голосов
/ 27 июня 2018

Да, это ожидается, если есть нулевой символ, печать строки на экране может на этом остановиться. Символы все равно будут отправлены, но строка не должна быть напечатана на экране.

Обратите внимание, что C использует NULL для разделения строк, и ОС может интерпретировать строки, которые она получает, с теми же соглашениями. Это позволяет непечатным символам интерпретироваться процессором определенным образом процессором, а процессор включает в себя весь комплекс компилятора, исполняющую среду (ОС и программы в ОС) и аппаратное обеспечение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...