cython
1from libc.stdlib cimport malloc
2from libc.string cimport strcpy, strlen
3
4cdef char* hello_world = 'hello world'
5cdef size_t n = strlen(hello_world)
6
7
8cdef char* c_call_returning_a_c_string():
9cdef char* c_string = <char *> malloc(
10(n + 1) * sizeof(char))
11
12if not c_string:
13return NULL # malloc failed
14
15strcpy(c_string, hello_world)
16return c_string
17
18
19cdef int get_a_c_string(char** c_string_ptr,
20Py_ssize_t *length):
21c_string_ptr[0] = <char *> malloc(
22(n + 1) * sizeof(char))
23
24if not c_string_ptr[0]:
25return -1 # malloc failed
26
27strcpy(c_string_ptr[0], hello_world)
28length[0] = n
29return 0
30