2013-01-04 148 views
4

我有一個C函數返回字符串(char *),我們稱之爲foo()。 在python中,我想調用它並使用它的返回值,當我完成時,我想調用另一個C函數,它釋放返回的字符串fooctypes char *需要的指針

如何獲得指針和字符串本身?如果我這樣做:

fooFunc = foolib.foo 
fooFunc.restype = c_char_p 
r = fooFunc() 

然後我得到的字符串,但不是指針。如果我在沒有指定restype的情況下這樣做,我會得到一個似乎是正確地址的int,但每當我試圖用c_char_p(<address>)來施放它時,它都會崩潰並出現分段錯誤。

回答

1

我很驚訝你不能只是將c_char_p實例傳回第二個函數,但我沒有手頭的工具來驗證它爲什麼會失敗。

然而,作爲替代方案,我相信你可以嘗試:

  • 指定restype作爲一個簡單的指針(c_void_p
  • 當你要處理的字符串,可以使用ctypes.string_at構建它
  • 將最初返回的指針傳遞給釋放函數。
+0

這很好用,非常感謝! – Mkoch