ctypes通过引用传递字符串:字符串未更新
问题描述:
我想将引用传递给从python到c程序的字符串。 c程序将一些东西写入字符串,我想用python读回它。 C程序是这样的:ctypes通过引用传递字符串:字符串未更新
void foo(char *name) {
name = "Hello World";
}
而Python脚本:
>>> import ctypes
>>> lib=ctypes.CDLL('libfoo.so')
>>> name=ctypes.create_string_buffer(32)
>>> print name.value
>>> lib.foo(name)
>>> print name.value
>>>
我期望的 “Hello World” 第二print
后。 我敢肯定这很简单,但我不知道有什么问题......
答
您的C代码更改指针的值,而不是更改缓冲区。请记住,C参数是按值传递的,因此修改参数永远不会导致调用者可以看到的更改。
无论如何,您只需要使用strcpy
将您的字符串复制到提供的缓冲区中。
void foo(char *name) {
strcpy(name, "Hello World");
}
很明显,在真实的代码中,您还需要传递缓冲区长度,以避免缓冲区溢出。