У меня есть функция C, которая ожидает список \ 0 завершенных строк в качестве входных данных:
void external_C( int length , const char ** string_list) {
// Inspect the content of string_list - but not modify it.
}
Из python (с ctypes) я хотел бы вызвать эту функцию на основе списка строк python:
def call_c( string_list ):
lib.external_C( ?? )
call_c( ["String1" , "String2" , "The last string"])
Любые советы о том, как создать структуру данных на стороне Python? Заметьте, что я гарантирую, что функция C НЕ будет изменять содержимое строк в string_list.
С уважением,
joakim
def call_c(L):
arr = (ctypes.c_char_p * len(L))()
arr[:] = L
lib.external_C(len(L), arr)
Большое спасибо; это сработало как шарм. Я также сделал альтернативную вариацию следующим образом:
def call_c( L ):
arr = (ctypes.c_char_p * (len(L) + 1))()
arr[:-1] = L
arr[ len(L) ] = None
lib.external_C( arr )
А затем в C-функции я итерировал список (char **), пока не нашел NULL.