You can of course send an array of strings:
CALL menu(n, [character(20) :: 'This is option 1', &
'Option Two', &
'Option number three'] )
write(*,*) 'You chose option ' ,n
contains
subroutine menu(n, entrylist)
CHARACTER(len=*),intent(in) :: entrylist(:)
integer, intent(out) :: n
integer i
do i=1,size(entrylist)
write(*,*) trim(entrylist(i))
end do
read(*,*) n
end subroutine
end
This form of array constructor is Fortran 2003. If you have to avoid it, then build the array by normal assignments of elements.
strings(1) = 'This is option 1'
strings(2) = 'Option Two'
strings(3) = 'Option number three'
call menu(n, strings)
Note, that the subroutine requires an explicit interface, therefore it is an internal procedure in this short example. You want it typically in a module in full scale programs.