ctypes возвращают строку из функции c

Я ветеран Python, но в C не особо баловался. После полдня, когда я не нашел в интернете ничего подходящего, я подумал, что попрошу здесь и получу необходимую помощь.

Я хочу написать простую функцию C, которая принимает строку и возвращает другую строку. Я планирую связать эту функцию на нескольких языках (Java, Obj-C, Python и т. Д.), Поэтому я думаю, что это должен быть чистый C?

Вот что у меня так далеко. Заметьте, что я получаю segfault при попытке получить значение в Python.

Привет
#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

Я читал, что ошибка вызвана тем, что C освобождает память, которая была первоначально выделена для возвращаемой строки. Может я просто лаю не на том дереве?

Как правильно выполнить то, что я хочу?