Python,从C库获取字符串

Python,从C库获取字符串,python,c,Python,C,我已经很多年没有使用C了,所以我一直在研究如何从一个简单的库中获取字符串并将其输入Python 测试c #include <stdlib.h> #include <string.h> #include <stdio.h> char * get_string() { char theString[]= "This is my test string!"; char *myString = malloc ( sizeof(ch

我已经很多年没有使用C了,所以我一直在研究如何从一个简单的库中获取字符串并将其输入Python

测试c

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

char * get_string() {

        char theString[]= "This is my test string!";

        char *myString = malloc ( sizeof(char) * (strlen(theString)) +1 );

        strcpy(myString, theString);

        return myString;
}
python.py

#!/usr/bin/env python

import ctypes

def main():
    string_lib = ctypes.cdll.LoadLibrary('test.so')
    myString = string_lib.get_string()
    print ctypes.c_char_p(myString).value

if __name__ == '__main__':
    main()
当我运行Python脚本时,我得到:

Segmentation fault: 11
如果我只是打印结果,我会得到一个数值,我假设它是指针。。。我怎样才能让它工作


谢谢

问题在于您使用的是64位Python。这将截断返回的指针

首先声明重新类型:

 import ctypes

 def main():
     string_lib = ctypes.cdll.LoadLibrary('test.so')
     string_lib.get_string.restype = ctypes.c_char_p
     myString = string_lib.get_string()
     print myString

 if __name__ == '__main__':
     main()

编译c代码时是否需要-fpic标志?@PaulRooney-现在尝试了,结果相同。
 import ctypes

 def main():
     string_lib = ctypes.cdll.LoadLibrary('test.so')
     string_lib.get_string.restype = ctypes.c_char_p
     myString = string_lib.get_string()
     print myString

 if __name__ == '__main__':
     main()