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"); 
} 

很明显,在真实的代码中,您还需要传递缓冲区长度,以避免缓冲区溢出。