How to use character function of where the result is of unknown length initially?
The trim()
function, I understand, shows that it is possible not to specify the length of returning string.
For example:
write (*,*) trim(str)
will return only part of the string without trailing spaces.
This function does not have any idea about the length of returning string before the call.
Or trim()
function has limitations?
On more variant is to find original code of trim()
function.
I have found (Returning character string of unknown length in fortran) but it is not the answer to my question.
To be sure, I want to write function, that returns string by integer number.
Something like this:
function strByInt(myInt)
...
write (strByInt,fmt) myInt; return
end function strByInt
somewhere else:
write (*,*) strByInt(50) ! will write '50'
That question you referenced partially answers it. It mentions the allocatable characters with deferred length. See below my implementation I use regularly:
function strByInt(i) result(res)
character(:),allocatable :: res
integer,intent(in) :: i
character(range(i)+2) :: tmp
write(tmp,'(i0)') i
res = trim(tmp)
end function
The result variable is allocated on assignment on the last line to fit the answer.
The trim
function is a different beast, as an intrinsic function it doesn't have to be programmed in Fortran and can obey different rules. It just returns what it needs to return. But it could be as well implemented as above quite easily.