在关注this 之后,我写了一个C库,我使用ctypes从python调用它。 C库包含一个函数,它接受char*
并修改其内容。我想阅读Python中的内容,但是,在Python中调用库函数之后,即使在C代码中包含printf
语句我在终端中看到正确的输出,我也会得到一个空字符串。我究竟做错了什么?
C代码:
void somefunction(char * pythonbuffer)
{
/* do something */
printf("%s", pythonbuffer);
}
Python代码:
lib.somefunction.argtypes = [ctypes.c_char_p]
lib.somefunction.restype = ctypes.c_void_p
buffer = ctypes.create_string_buffer(upper_limit)
lib.somefunction(buffer)
print(buffer.value)
输出:
b''
答案 0 :(得分:1)
发现问题。事实证明,/* do something */
部分中的代码以某种方式改变了pythonbuffer
的地址。我使用临时char *
解决了这个问题,然后使用pythonbuffer
将其复制到strcpy
。