2013-03-27 111 views
0

我想將引用傳遞給從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後。 我敢肯定這很簡單,但我不知道有什麼問題......

回答

2

您的C代碼更改指針的值,而不是更改緩衝區。請記住,C參數是按值傳遞的,因此修改參數永遠不會導致調用者可以看到的更改。

無論如何,您只需要使用strcpy將您的字符串複製到提供的緩衝區中。

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

很明顯,在真實的代碼中,您還需要傳遞緩衝區長度,以避免緩衝區溢出。

相關問題