Fortran character allocatable

Variable length strings are implemented in Fortran 2003 standard like:

character(:), allocatable :: str

Passing such variables to procedures is declared the same as fixed length strings. In fact, we always declare actual arguments with “*” to avoid needing every string an exact length.

subroutine my(str)
character(*), intent(in) :: str

Note that intrinsic Fortran functions need traditional fixed length character variables. For example:

character(1000) :: buf

call get_command_argument(1, buf)

Functions can also return allocatable characters, with the caveat that some compilers like Nvidia HPC currently require the variable be manually allocated. Other compilers auto-allocate character functions like numeric arrays in Fortran 2003 code.

function greet(b)
logical, intent(in) :: b
character(:), allocatable :: greet

!! only nvfortran needs manual allocation

if(b) then
  allocate(character(5) :: greet)
  greet = 'hello'
else
  allocate(character(3) :: greet)
  greet = 'bye'
endif

end function greet