ctypes возвращают строку из функции c
я ветеран Python, но убежищеЯ много баловался с C. После полдня, когда я не нашел в интернете ничего подходящего для меня, я подумал, что попрошу здесь и получу необходимую помощь.
Я хочу написать простую функцию C, которая принимает строку и возвращает другую строку. Я планирую связать эту функцию на нескольких языках (Java, Obj-C, Python и т. Д.), Поэтому я думаю, что это должен быть чистый C?
Вот'Это то, что я имею до сих пор. Заметьте, что я получаю segfault при попытке получить значение в Python.
Привет#include
#include
#include
const char* hello(char* name) {
static char greeting[100] = "Hello, ";
strcat(greeting, name);
strcat(greeting, "!\n");
printf("%s\n", greeting);
return greeting;
}
main.pyI»import ctypes
hello = ctypes.cdll.LoadLibrary('./hello.so')
name = "Frank"
c_name = ctypes.c_char_p(name)
foo = hello.hello(c_name)
print c_name.value # this comes back fine
print ctypes.c_char_p(foo).value # segfault
мы читаем, что ошибка вызвана тем, что C освобождает память, которая была первоначально выделена для возвращаемой строки. Может я'я просто лаю не на том дереве?
Какие'правильный способ сделать то, что я хочу?