Из документов Cython:
char* PyString_AsString (PyObject *string)
Возвращает нулевое представление содержимого строки.Указатель ссылается на внутренний буфер строки, а не на копию.Данные не должны быть изменены каким-либо образом.Он не должен быть выделен.
У меня нет настройки компилятора Cython и удобного atm (я могу запустить это позже и проверить), но это должно привести к коду, который выглядит примерно так:
from libc.stdlib cimport malloc, free
cdef char **string_buf = malloc(len(pystr_list) * sizeof(char*))
for i in range(len(pystr_list)):
string_buf[i] = PyString_AsString(pystr_list[i])
# Do stuff with string_buf as a char**
# ...
free(string_buf)
Указатель stringBuf теперь является символом ** для ваших исходных данных без копирования каких-либо строк - хотя вам не следует редактировать данные в каждой строке, поскольку строки должны рассматриваться как const char * (из документов),Если вам нужно манипулировать строками, вам придется запоминать данные или создавать новые объекты, которые вас не волнуют в Python - хотя, поскольку у вас есть набор строк, я сомневаюсь, что вы их редактируете.