本帖最后由 布衣龙共 于 2021-8-16 16:17 编辑
原来是 sqlite。sqlite3_get_table 的参数,你给他一个指针,由它内部分配空间,最后把它分配的空间的地址告诉 Fortran。
我们之前的思路,都是由 Fortran 分配空间,构建好,然后交给 C 去填充。
这两者的思路是不同的。
[Fortran] 纯文本查看 复制代码
type(c_ptr),target :: val
type(c_ptr),pointer:: p1(:)
istat = sqlite3_get_table(db,"select * from MY_TABLE",val,nRow,nColumn,ErrMsg)
call c_f_pointer(val,p1,[nRow*nColumn])
Do i = 1 , nRow
Do j = 1 , nColumn
call c_f_pointer( p1( (i-1)*nColumn + j ),cRes)
k = index(cRes,c_null_char)
Results(j,i) = cRes(:k-1)
End Do
End Do |