0

文字列への参照を python から ac プログラムに渡したいです。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

>>>

2 番目の後に「Hello World」を期待しprintます。簡単だとは思いますが、何が悪いのかわかりません...

4

1 に答える 1

2

C コードは、バッファーを変更するのではなく、ポインターの値を変更します。C パラメーターは値によって渡されるため、パラメーターを変更しても、呼び出し元に表示される変更が発生することはありません。

とにかく、strcpy文字列を提供されたバッファにコピーするために使用する必要があります。

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

明らかに、実際のコードでは、バッファ オーバーランを回避できるように、バッファ長も渡す必要があります。

于 2013-03-27T17:43:56.583 に答える