Я ветеран Python, но не стал много набирать в C. После полудня, когда я ничего не нашел в Интернете, который работает для меня, я думал, что попрошу здесь и получить помощь, в которой я нуждаюсь.
Что я хочу сделать, это написать простую функцию C, которая принимает строку и возвращает другую строку. Я планирую связать эту функцию на нескольких языках (Java, Obj-C, Python и т.д.), Поэтому я думаю, что она должна быть чистой C?
Вот что я до сих пор. Заметьте, что я получаю segfault при попытке получить значение в Python.
hello.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
Я прочитал, что segfault вызвано тем, что C освобождает память, которая была первоначально выделена для возвращаемой строки. Может быть, я просто лаю неправильное дерево?
Какой правильный способ выполнить то, что я хочу?