我想将对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”。
我确信这很简单,但我无法弄清楚出了什么问题......
答案 0 :(得分:2)
您的C代码更改指针的值,而不是更改缓冲区。请记住,C参数是按值传递的,因此修改参数永远不会导致调用者可以看到的更改。
无论如何,您只需要使用strcpy
将字符串复制到提供的缓冲区中。
void foo(char *name) {
strcpy(name, "Hello World");
}
显然,在实际代码中你也想要传递缓冲区长度,这样你就可以避免缓冲区溢出。