from libc.stdlib cimport malloc from libc.string cimport strcpy, strlen cdef char* hello_world = 'hello world' cdef Py_ssize_t n = strlen(hello_world) cdef char* c_call_returning_a_c_string(): cdef char* c_string = malloc((n + 1) * sizeof(char)) if not c_string: return NULL # malloc failed strcpy(c_string, hello_world) return c_string cdef void get_a_c_string(char** c_string_ptr, Py_ssize_t *length): c_string_ptr[0] = malloc((n + 1) * sizeof(char)) if not c_string_ptr[0]: return # malloc failed strcpy(c_string_ptr[0], hello_world) length[0] = n