【发布时间】:2021-04-27 18:46:29
【问题描述】:
我正在尝试通过 ctypes 将我的 C 代码中的 char * 和 char ** 传递给 Python。这是我的代码:
.h
int process(unsigned char *line, unsigned char (*word)[128], char *(chunk)[16]);
.c 文件
unsigned char line[256];
unsigned char word[266][128];
char chunk[128][16];
fprintf(stdout, " output_value: %d, %s, %s", process(line, word, chunk), word[0], chunk[0]);
.py
fin = open(filename, encoding='UTF-8')
content = fin.read().splitlines()
_process = _mod.process
_process.argtypes = [ POINTER(c_ubyte), POINTER(c_char_p), POINTER(c_char_p) ]
_process.restype = c_int
string_org = ''.join(map(str, content)).encode("UTF-8")
line = (c_ubyte * len(string_org)).from_buffer_copy(string_org)
word = (c_char_p)()
chunk = (c_char_p)()
print("output_value: %d %s %s" %(process(line, word, chunk), word[0], chunk[0]))
结果:
TypeError: 'c_char_p' object is not subscriptable --> print("output_value: %d %s %s" %(process(line, word, chunk), word[0], chunk[0]))
Segmentation fault (core dumped)
是什么导致了这个问题?
是和一些内存管理有关还是只是获取C字符串的方法不对?
谁能回答我的问题。提前谢谢你。
【问题讨论】: