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 освобождает память, которая была первоначально выделена для возвращаемой строки. Может я'я просто лаю не на том дереве?

Какие'правильный способ сделать то, что я хочу?

Ответы на вопрос(3)

Ваш ответ на вопрос