我是一名 Python 资深人士,但对 C 的涉猎不多。在互联网上半天没有找到任何适合我的东西后,我想我会在这里提问并获得我需要的帮助。
我想做的是编写一个简单的 C 函数,它接受一个字符串并返回一个不同的字符串。我打算用几种语言(Java、Obj-C、Python 等)绑定这个函数,所以我认为它必须是纯 C?
这是我到目前为止所拥有的。请注意,尝试在 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;
}
主文件
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 释放最初为返回的字符串分配的内存引起的。也许我只是在叫错树?
什么是完成我想要的正确方法?