4

文字列 (char *) を返す C 関数があります。それを と呼びましょうfoo()。Pythonでは、それを呼び出して戻り値を使用したいのですが、完了したら、foo返された文字列を解放する別のC関数を呼び出したいと思います。

ポインターと文字列自体の両方を取得するにはどうすればよいですか? 私がこれを好きなら:

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

次に、文字列を取得しますが、ポインターは取得しません。を指定せずに実行するrestypeと、正しいアドレスと思われる int が得られますが、それをキャストしてキャストしようとするとc_char_p(<address>)、セグメンテーション違反でクラッシュします。

4

1 に答える 1

1

インスタンスを 2 番目の関数に戻すことができないことに驚きc_char_pましたが、失敗する理由を検証するためのツールが手元にありません。

ただし、代わりに、次のことを試すことができると思います。

  • restypeを単純なポインターとして指定する( c_void_p)
  • 文字列を操作したい場合は、使用ctypes.string_atして構築します
  • 最初に返されたポインターを解放関数に渡します。
于 2013-01-04T09:34:25.990 に答える