динамический массив с нулевым завершением как возвращаемое значение в Python


Из python я пытаюсь использовать функцию c, которая возвращает динамически выделенный нулевой массив целых чисел:

int* my_func(void)
{
    int i;
    int *ret = (int*)malloc((LEN + 1) * sizeof(int));

    for (i = 0; i < LEN; i++) ret[i] = 1;
    ret[LEN] = 0

    return ret;
}

Мне нужно что-то вроде

from ctypes import *

l = cdll.LoadLibrary("lib.so")
my_func = l.my_func
my_func.restype = c_int * LEN

for x in my_func(): print x

Проблема в том, что LEN неизвестно в коде python, мне нужно прочитать массив до первого нулевого элемента.

1 2

1 ответ:

На самом деле еще не работал с ctypes, но как насчет:

from ctypes import *

l = cdll.LoadLibrary("lib.so")
my_func = l.my_func
my_func.restype = POINTER(c_int)

i = 0;
rv = my_func()
while rv[i]:
    print rv[i]
    i += 1