使用python ctypes调用libc.so.6中的iswctype函数时出现分段错误

使用python ctypes调用libc.so.6中的iswctype函数时出现分段错误,python,c,python-3.x,ctypes,libc,Python,C,Python 3.x,Ctypes,Libc,我正在学习python中的ctypes模块。我有以下代码: 代码 导入系统 打印(系统版本) 导入ctypes libc=ctypes.CDLL(“/lib/x86_64-linux-gnu/libc.so.6”) 打印(libc) 对于x英寸“我学蟒蛇!: 打印(“%s]”%x,libc.iswalpha( 作战需求文件(x) )) libc.wctype.argtypes=[ctypes.c\u char\p] alpha_wctype=libc.wctype(b'print') 打印(类型

我正在学习python中的ctypes模块。我有以下代码:

代码 导入系统 打印(系统版本) 导入ctypes libc=ctypes.CDLL(“/lib/x86_64-linux-gnu/libc.so.6”) 打印(libc) 对于x英寸“我学蟒蛇!: 打印(“%s]”%x,libc.iswalpha( 作战需求文件(x) )) libc.wctype.argtypes=[ctypes.c\u char\p] alpha_wctype=libc.wctype(b'print') 打印(类型(alpha_wctype)) libc.iswctype.restype=ctypes.c_int 打印(libc.iswctype)我"), 阿尔法(WCU型) 输出
3.7.7(默认,2020年5月7日21:25:33)
[GCC 7.3.0]
'我' 1.
'学' 1.
‘P’1024
“y”1024
‘t’1024
‘h’1024
o'1024
'n'1024
'!' 0
致命的Python错误:分段错误
当前线程0x00007f1d5b9dd740(最新调用优先):
文件“test2.py”,第15行
[1] 12178分段错误python-X faulthandler test2.py

那么,为什么最后一行产生了分段错误,我如何使用ctypes正确地使用iswctype呢?

wctype
不返回
int
,而是返回
wctype\t
。Python没有可移植的
ctypes
类型,但在您的系统上它可能是
无符号的long
,libc.wct也是如此ype.restype=ctypes.c_-ulong。类似地,您需要指定
iswctype
的参数类型,如下所示:
libc.iswctype.argtypes=[ctypes.c_-ulong,ctypes.c_-ulong]
。如果不做这些事情,您就截断了导致SEGFULT的
alpha_wctype
值。

是的,非常感谢。我以为这些类型是c_ushort。但是我如何确保这些类型,而不搜索libc代码?有什么pythonic方法吗?@MengZhao我不这么认为。我查看了,但我没有看到任何更好的方法呃,这个办法。
3.7.7 (default, May  7 2020, 21:25:33) 
[GCC 7.3.0]
<CDLL '/lib/x86_64-linux-gnu/libc.so.6', handle 7f1d5b9e24f0 at 0x7f1d5a498f10>
'我' 1
'学' 1
'P' 1024
'y' 1024
't' 1024
'h' 1024
'o' 1024
'n' 1024
'!' 0
<class 'int'>
Fatal Python error: Segmentation fault

Current thread 0x00007f1d5b9dd740 (most recent call first):
  File "test2.py", line 15 in <module>
[1]    12178 segmentation fault  python -X faulthandler test2.py