Python ctypes如何读取C代码修改的字符串

时间:2017-06-21 17:26:57

标签: python c ctypes

在关注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''

1 个答案:

答案 0 :(得分:1)

发现问题。事实证明,/* do something */部分中的代码以某种方式改变了pythonbuffer的地址。我使用临时char *解决了这个问题,然后使用pythonbuffer将其复制到strcpy