У меня есть следующий Фортран
SUBROUTINE SETPATHS(INPUT)
!DEC$ ATTRIBUTES DLLEXPORT::SetPaths
CHARACTER*20 INPUT
CHARACTER*20 DIRECTORY
DIRECTORY = 'ABCDEFG'
WRITE(6, *) 'INPUT LEN_TRIM = ', LEN_TRIM(INPUT)
WRITE(6, *) 'DIRECTORYLEN_TRIM = ', LEN_TRIM(DIRECTORY)
END SUBROUTINE
И я вызываю функцию из C #, передавая 'ABCDEFG'.
Когда я устанавливаю точку останова на моем отладчике, INPUT и DIRECTORY имеют одинаковые символы. У обоих есть «ABCDEFG», за которым следует одинаковое количество пробелов.
Однако программа выводит
INPUT LEN_TRIM = 20
DIRECTORYLEN_TRIM = 7
Это правильное поведение? Если две строки имеют одинаковые значения, почему LEN_TRIM дает разные результаты?
Обновление: я обнаружил эту задокументированную проблему (хотя это не мой компилятор Intel 8.1). http://support.microsoft.com/kb/89131