Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Fortran中返回不同长度的字符串数组_Arrays_String_Types_Fortran_Character - Fatal编程技术网

Arrays 在Fortran中返回不同长度的字符串数组

Arrays 在Fortran中返回不同长度的字符串数组,arrays,string,types,fortran,character,Arrays,String,Types,Fortran,Character,我想创建一个类型来包含Fortran中的字符串数组,而不显式指定长度,这样我就可以从函数返回它 以下是我的类型: type returnArr Character (*), dimension(4) :: array end type returnArr 以下是函数的签名: type(returnArr) FUNCTION process(arr, mean, stdDev) result(j) 下面是我尝试设置结果的地方: j%array(1)= "Test" 但我得到的只是以

我想创建一个类型来包含Fortran中的字符串数组,而不显式指定长度,这样我就可以从函数返回它

以下是我的类型:

type returnArr
    Character (*), dimension(4)  :: array
end type returnArr
以下是函数的签名:

type(returnArr) FUNCTION process(arr, mean, stdDev) result(j)
下面是我尝试设置结果的地方:

j%array(1)= "Test"
但我得到的只是以下错误:

Error: Character length of component ‘array’ needs to be a constant specification expression at (1)

如何声明类型以使字符串具有不同的长度?

派生类型的字符组件可以具有显式长度,也可以延迟其长度。后者是改变其值的方式(通过多种方式中的任何一种)。还必须允许派生类型的数组中不同长度的灵活性

然而,使用
len=*
并不是说“延迟长度”的正确方式(它是“假定长度”)。相反,您可以使用
len=:
并使组件可分配(或指针):

然后可以有一个
returnArr
对象数组:

function process(arr, mean, stdDev) result(j)
  type(returnArr) :: j(4)
end function
任务,例如

  j(1)%char = "Test"
然后依赖于组件
char
的自动分配

请注意,现在函数结果是该容器类型的数组。我们不能这样做

function process(arr, mean, stdDev) result(j)
  character(:), allocatable :: j(:)
end function
并将
j(1)
分配到不同于
j(2)
(等)的长度

同样地

type returnArr
  Character (:), allocatable  :: char(:)
end type returnArr

不允许那些
char
组件元素具有不同的长度。

这个问题的答案在哪里?我哪儿都找不到@francescalusI正在专门寻找如何返回字符串数组。这个问题还没有被提出@francescalus@HighPerformanceMark我无法通过简单地说出Character(len=65)、dimension(4)来返回数组。要添加到High Performance Mark的注释中,容器类型可以用于字符串,但主要是当您希望元素的长度不同时。@francescalus这是可行的,但实际上我希望长度的大小不同,所以现在我遇到了一个新问题,即将类型定义为character(*),dimension(4)::array
type returnArr
  Character (:), allocatable  :: char(:)
end type returnArr