私はPythonのベテランですが、Cにあまり手を出していないのです。インターネット上で自分に合ったものが見つからなかった半日後、ここで質問して必要なサポートを受けたいと思いました。
私がやりたいのは、文字列を受け入れて別の文字列を返す単純なC関数を作成することです。この関数をいくつかの言語(Java、Obj-C、Pythonなど)でバインドする予定なので、純粋なCでなければならないと思いますか?
これが私がこれまでに持っているものです。Pythonで値を取得しようとすると、セグメンテーション違反が発生することに注意してください。
こんにちは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
セグメンテーション違反は、Cが返された文字列に最初に割り当てられたメモリを解放することによって引き起こされることを読みました。たぶん私は間違った木を吠えているだけですか?
私が望むことを達成するための適切な方法は何ですか?