У меня есть общая библиотека C со структурой, которую я хотел бы использовать в своем коде Python
struct my_struct {
char name[64];
};
поэтому в python я воссоздаю его с
class MyStruct(ctypes.Structure):
_fields_ = [
("name", ctypes.c_char*64)
]
когда я проверяю тип MyStruct.name, я получаю 'str', тогда как я ожидал 'c_char_Array_64'.
s=MyStruct()
print type(s.name) # <type 'str'>
Поэтому, когда я устанавливаю «имя» и пытаюсь использовать его, С видит его пустым.
s.name="Martin"
lib=ctypes.cdll.LoadLibrary('./mylib.so')
lib.my_func(s) # prints ''
где lib - это общая библиотека C, загруженная ctypes, а my_func просто печатает struct-> name
void my_func(struct my_struct *s){
printf("Hello %s\n", s->name);
}
Я хотел бы знать, почему ctypes.Structure преобразует массив символов в строку и как использовать его в указанном выше случае.
Спасибо
Обновление и решение
Благодарим @CristiFati за помощь в устранении этой проблемы. Я отметил его ответ как правильный, поскольку на самом деле он является ответом на опубликованный вопрос. В моем случае проблема заключалась в том, что Structs НЕ были равной длины в программах Python и C. Поэтому, чтобы тот, кто столкнется с этим вопросом в будущем, очень тщательно проверил, что ваши Структуры на самом деле определены одинаково.