我想知道在使用NULL字符ACHAR(0)
的情况下,Fortran的I / O应该如何工作。
实际的任务是用正好八个字符的块填充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
这是预期的行为吗?知道如何在任何情况下使输出宽8个字符吗?
答案 0 :(得分:1)
是的,如果有一个空字符,则可以在屏幕上停止字符串 的打印。仍将发送字符,但是不必在屏幕上打印字符串。
请注意,C使用NULL来分隔字符串,并且OS可以使用相同的约定解释它收到的字符串。允许处理器以处理器特定的方式解释不可打印的字符,并且处理器包括编译器,执行环境(OS和OS中的程序)以及硬件的整个复合体。
答案 1 :(得分:1)
使用编辑描述符A8
时,字段宽度为8。为了输出,将写入八个字符。
在该示例中,不是您期望的字符写法,而是终端如何显示字符。
您可以使用hexdump
之类的工具进一步检查输出,也可以写入内部文件并查看任意子字符串。