ctypes通过引用传递字符串:字符串未更新

时间:2013-03-27 17:41:50

标签: python reference ctypes

我想将对python的字符串引用传递给c程序。 c程序将一些东西写入字符串,我想在python中读回来。 c程序看起来像:

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

>>>

在第二个print之后,我期待“Hello World”。 我确信这很简单,但我无法弄清楚出了什么问题......

1 个答案:

答案 0 :(得分:2)

您的C代码更改指针的值,而不是更改缓冲区。请记住,C参数是按值传递的,因此修改参数永远不会导致调用者可以看到的更改。

无论如何,您只需要使用strcpy将字符串复制到提供的缓冲区中。

void foo(char *name) {
    strcpy(name, "Hello World");
}

显然,在实际代码中你也想要传递缓冲区长度,这样你就可以避免缓冲区溢出。