Python,从C库获取字符串
我已经很多年没有使用C了,所以我一直在研究如何从一个简单的库中获取字符串并将其输入Python 测试cPython,从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
#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()