passage d'une chaîne comme argument lors de la mannequin a une longueur spécifiée

si j'ai ce code

module test
contains
   subroutine xx(name)
      character(len=20), intent(in), optional :: name

      if (present(name)) then
         print *, name
      else
         print *, "foo"
      endif
   end subroutine
end module
program x
   use test

   call xx()
   call xx("foo2")
end program

Il ne compile pas car "foo2" n'est pas de longueur 20, et le compilateur se plaint

test.f90(17): error #7938: Character length argument mismatch.   ['foo2']
   call xx("foo2")
-----------^

Comment puis-je faire de cette chose que le travail, sans modification de la sous-routine mannequin len cahier des charges ? Est-il obligatoire d'avoir un intermédiaire variable déclarée avec la même longueur et le passer à l'heure de l'appel ?

OriginalL'auteur Stefano Borini | 2011-01-24