ctypes zwracają ciąg znaków z funkcji c

Jestem weteranem Pythona, ale nie mam zbyt wiele doświadczenia w C. Po pół dnia nie znajdowania niczego w Internecie, który działa dla mnie, myślałem, że zapytam tutaj i otrzymam potrzebną pomoc.

Chcę napisać prostą funkcję C, która akceptuje łańcuch i zwraca inny ciąg. Planuję powiązać tę funkcję w kilku językach (Java, Obj-C, Python itp.), Więc myślę, że musi to być czysty C?

Oto, co mam do tej pory. Zauważ, że otrzymuję segfault podczas próby pobrania wartości w Pythonie.

cześć, c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

const char* hello(char* name) {
    static char greeting[100] = "Hello, ";
    strcat(greeting, name);
    strcat(greeting, "!\n");
    printf("%s\n", greeting);
    return greeting;
}
main.py
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

Czytałem, że segfault jest spowodowany zwolnieniem pamięci C, która została początkowo przydzielona dla zwróconego ciągu. Może po prostu szczeka złe drzewo?

Jaki jest właściwy sposób na osiągnięcie tego, czego chcę?

questionAnswers(3)

yourAnswerToTheQuestion