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

>>>

我希望在第二个之后出现“Hello World” print。我确定这很简单,但我无法弄清楚出了什么问题......

4

1 回答 1

2

您的 C 代码更改指针的值,而不是更改缓冲区。请记住,C 参数是按值传递的,因此修改参数永远不会导致调用者可以看到的更改。

无论如何,您只需要将strcpy您的字符串复制到提供的缓冲区中。

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

显然,在实际代码中,您也需要传递缓冲区长度,以避免缓冲区溢出。

于 2013-03-27T17:43:56.583 回答