The passage of the argument depends on the compiler if the requirements of the standard are met, but, as a rule, the argument of the argument CHARACTER (len = *) will have an interface similar to
void foo (char * s, int len)
and in the implementation of the foo procedure, the hidden len argument is used as the length of the string. OTOH, for the argument CHARACTER (len = somevalue), the hidden len argument is either ignored or not passed at all, and the procedure code assumes that somevalue is the correct string length.
As you saw, you should never use anything other than LEN = * unless you really know what you are doing, and you can quote the chapter and verse from the standard to explain why.
source share