Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ctypes示例异常_Python_Python 3.x_Ctypes - Fatal编程技术网

Python ctypes示例异常

Python ctypes示例异常,python,python-3.x,ctypes,Python,Python 3.x,Ctypes,我正在研究如何通过ctypes将带有字符串字段的结构传递给C。我正在Ubuntu(DigitalOcean)上使用Python3。我一直在努力让它工作。我在设置ctypes.c\u char\u p对象指向Python字符串的过程中发现 >>从ctypes导入* >>>类别单元(结构): ... 通过 >>>单元格._字段_=[('name',c_char\u p),('next',指针(单元格))] >>>c1=单元格() >>>c1.name=“foo” 但我有一个例外: TypeEr

我正在研究如何通过ctypes将带有字符串字段的结构传递给C。我正在Ubuntu(DigitalOcean)上使用Python3。我一直在努力让它工作。我在设置
ctypes.c\u char\u p
对象指向Python字符串的过程中发现

>>从ctypes导入*
>>>类别单元(结构):
...   通过
>>>单元格._字段_=[('name',c_char\u p),('next',指针(单元格))]
>>>c1=单元格()
>>>c1.name=“foo”
但我有一个例外:

TypeError:需要字节或整数地址,而不是str实例

这个错误与基于我的代码所遇到的情况我所期望的是一致的。所以,我的问题是,我是否误解了这个示例,或者这个示例不正确?

这可能是因为
ctypes.c\u char\u p
是一个ByTestStream,而不是一个字符串。如果你写
c1.name=b'bar'
,它应该可以工作。然后,要从中恢复Python字符串,您应该使用
c1.name.decode('utf-8')

您使用的是哪个Python版本?这个例子是针对Python3.9的,可能它不适用于早期版本Python3.8.6。如果您查看3.8文档,示例也是一样的。我可以使用Python3.6.9重现这种行为,但在python版本为3.8.0的地方尝试不会出现错误……但提供@ffdoctor建议的字节字符串在这两个版本上都有效,这很奇怪。我在3.8.6中遇到了一个错误。添加bytes修饰符对文档来说是一个非常简单的修复,但是听起来可能会发生一些更微妙的事情。是的,这就是如何使其工作的,但是示例显示了一些不同的东西。我只是想确认这个例子是错误的,或者找出我遗漏了什么。嗯,我在python.org/shell上试过,也遇到了同样的错误,所以我不知道。可能是平台依赖行为?根据这个答案,可能会有所不同。@gph这个例子是错误的。字节字符串(
b'xxxx'
)需要初始化或传递给
c\u char\p