Рассмотрим следующую программу на Фортране:
program test
character(len=:), allocatable :: str
allocate(character(3) :: str)
print *, len(str)
str = '12345'
print *, len(str)
end program
Когда я запускаю это, я получаю ожидаемый результат:
3
5
То есть строка символов была изменена с 3 до 5, когда для str было установлено значение «12345». Если вместо этого я использую массив динамических строк, это не так. Пример:
program test
character(len=:), allocatable :: str(:)
allocate(character(3) :: str(2))
print *, len(str(1)), len(str(2))
str(1) = '12345'
print *, len(str(1)), len(str(2))
end program
Когда я запускаю это, я получаю:
3 3
3 3
Таким образом, набор str (1) не изменил длину строки. Я получаю такое же поведение с ifort 16.0.2 и gfortran 5.3.1. Мой вопрос соответствует ли это поведение последнему стандарту Fortran или это ошибка в компиляторах?