2use,
INTRINSIC :: iso_c_binding
8FUNCTION return_null_charp()
BIND(C)
10TYPE(c_ptr) :: return_null_charp
11END FUNCTION return_null_charp
13FUNCTION return_empty_charp()
BIND(C)
15TYPE(c_ptr) :: return_empty_charp
16END FUNCTION return_empty_charp
18FUNCTION return_8_charp()
BIND(C)
20TYPE(c_ptr) :: return_8_charp
21END FUNCTION return_8_charp
23FUNCTION return_c_ptr_ptr()
BIND(C)
25TYPE(c_ptr) :: return_c_ptr_ptr
26END FUNCTION return_c_ptr_ptr
29TYPE(c_ptr_ptr) :: strarrp
35print*,
'Testing strlen with C char* argument'
37IF (
strlen(return_null_charp()) /= 0)
THEN
38 print*,
'Error in strlen: a NULL char* does not return zero, ', &
39 strlen(return_null_charp())
43IF (
strlen(return_empty_charp()) /= 0)
THEN
44 print*,
'Error in strlen: a zero len char* does not return zero, ', &
45 strlen(return_empty_charp())
49IF (
strlen(return_8_charp()) /= 8)
THEN
50 print*,
'Error in strlen: a nonzero len char* does not return expected len (8), ', &
55print*,
'Strlen returns the expected values'
63print*,
'Getting a c_ptr_ptr object from C'
70print*,
'The object has ',c_ptr_ptr_getsize(strarrp),
' elements'
71IF (c_ptr_ptr_getsize(strarrp) /= 3)
THEN
72 print*,
'Error in c_ptr_ptr_getsize:',3,c_ptr_ptr_getsize(strarrp)
78IF (
strtofchar(c_ptr_ptr_getptr(strarrp, 1),100) /=
'first')
THEN
79 print*,
'Error in c_ptr_ptr_getptr:',
strtofchar(c_ptr_ptr_getptr(strarrp, 1),100),
':first'
82IF (
strtofchar(c_ptr_ptr_getptr(strarrp, 2),100) /=
'segundo')
THEN
83 print*,
'Error in c_ptr_ptr_getptr:',
strtofchar(c_ptr_ptr_getptr(strarrp, 2),100),
':segundo'
86IF (
strtofchar(c_ptr_ptr_getptr(strarrp, 3),100) /=
'troisieme')
THEN
87 print*,
'Error in c_ptr_ptr_getptr:',
strtofchar(c_ptr_ptr_getptr(strarrp, 3),100),
':troisieme'
90IF (
strtofchar(c_ptr_ptr_getptr(strarrp, 4),100) /=
'')
THEN
91 print*,
'Error in c_ptr_ptr_getptr: out of bound request should return empty string:',
strtofchar(c_ptr_ptr_getptr(strarrp, 4),100)
95print*,
'The object contains the expected data'
101print*,
'Creating a c_ptr_ptr object from a Fortran array of characters'
108print*,
'The object has ',c_ptr_ptr_getsize(strarrp),
' elements'
109IF (c_ptr_ptr_getsize(strarrp) /= 3)
THEN
110 print*,
'Error in c_ptr_ptr_getsize:',3,c_ptr_ptr_getsize(strarrp)
116IF (
strtofchar(c_ptr_ptr_getptr(strarrp, 1),100) /=
'first')
THEN
117 print*,
'Error in c_ptr_ptr_getptr:',
strtofchar(c_ptr_ptr_getptr(strarrp, 1),100),
':first'
120IF (
strtofchar(c_ptr_ptr_getptr(strarrp, 2),100) /=
'segundo')
THEN
121 print*,
'Error in c_ptr_ptr_getptr:',
strtofchar(c_ptr_ptr_getptr(strarrp, 2),100),
':segundo'
124IF (
strtofchar(c_ptr_ptr_getptr(strarrp, 3),100) /=
'troisieme')
THEN
125 print*,
'Error in c_ptr_ptr_getptr:',
strtofchar(c_ptr_ptr_getptr(strarrp, 3),100),
':troisieme'
128IF (
strtofchar(c_ptr_ptr_getptr(strarrp, 4),100) /=
'')
THEN
129 print*,
'Error in c_ptr_ptr_getptr: out of bound request should return empty string:',
strtofchar(c_ptr_ptr_getptr(strarrp, 4),100)
133print*,
'The object contains the expected data'
136END PROGRAM fortranc_test
Constructor for a c_ptr_ptr object.
Equivalent of the strlen C function.
Convert a null-terminated C string into a Fortran CHARACTER variable of the proper length.
Utility module for supporting Fortran 2003 C language interface module.