根据对类似问题的回答,我已经声明了gfortran does not allow character arrays with varying component lengths所示的字符。但是我想使用trim函数,因为我需要添加空格来手动填充名称,然后在代码的另一部分中使用这些变量。我可以在创建阵列的同时进行修剪吗?
错误:数组构造函数(1)
中的不同CHARACTER长度(3/4)
如果我添加随机字符以使它们具有相同的长度它可以工作,但出于显而易见的原因我无法做到这一点。我用gfortran和mpif90编译了两个结果相同
use mod_maxdims , only : maxstr
integer, parameter :: nvars_ncep = 12
character(len=maxstr), parameter, dimension(nvars_ncep) :: vars_ncep = &
(/ 'air' & ! Air temperature [ K]
, 'pres' & ! Pressure [ Pa]
, 'rhum' & ! Relative humidity [ %]
, 'uwnd' & ! Zonal wind [ m/s]
, 'vwnd' & ! Zonal wind [ m/s]
, 'pres' & ! Pressure [ Pa]
, 'dlwrf' & ! Downward long wave radiation [ W/m2]
, 'nbdsf' & ! Near-IR beam radiation [ W/m2]
, 'nddsf' & ! Near-IR diffuse radiation [ W/m2]
, 'vbdsf' & ! Visible beam radiation [ W/m2]
, 'vddsf' & ! Visible beam radiation [ W/m2]
, 'prate' /) ! Precipitation rate [kg/m2/s]
答案 0 :(得分:5)
gfortran阻止你编写非标准代码;这是禁止它的语言标准,而不是实施。
如果您已完成初始化字符数组,则所有条目必须具有相同的长度。在你的情况下,你必须用足够的空间填充每个较短的条目,使它们都等同。
另一种方法是在程序执行开始时插入条目。如果您编写类似vars_ncep(1) = 'air'
的内容,则其他字符将设置为空格,编译器将为您处理。但是,这意味着您的数组不能是parameter
。