ctypes gibt eine Zeichenfolge aus der c-Funktion zurück

Ich bin ein Python-Veteran, habe mich aber nicht viel mit C beschäftigt. Nachdem ich einen halben Tag lang nichts im Internet gefunden hatte, was für mich funktioniert, dachte ich, ich würde hier nachfragen und die Hilfe bekommen, die ich brauche.

Ich möchte eine einfache C-Funktion schreiben, die eine Zeichenfolge akzeptiert und eine andere Zeichenfolge zurückgibt. Ich plane, diese Funktion in mehreren Sprachen zu binden (Java, Obj-C, Python usw.), also denke ich, dass es reines C sein muss?

Folgendes habe ich bisher. Beachten Sie, dass beim Versuch, den Wert in Python abzurufen, ein Segfault auftritt.

Hallo 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

Ich habe gelesen, dass der Segfault dadurch verursacht wird, dass C den Speicher freigibt, der ursprünglich für den zurückgegebenen String reserviert war. Vielleicht belle ich nur den falschen Baum an?

Was ist der richtige Weg, um das zu erreichen, was ich will?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage