Передача списка строк из python / ctypes в функцию C, ожидающую символ **

У меня есть функция 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

20
задан habnabit 16 August 2010 в 15:52
поделиться

2 ответа

def call_c(L):
    arr = (ctypes.c_char_p * len(L))()
    arr[:] = L
    lib.external_C(len(L), arr)
25
ответ дан 30 November 2019 в 00:22
поделиться

Большое спасибо; это сработало как шарм. Я также сделал альтернативную вариацию следующим образом:

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.

5
ответ дан 30 November 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: