我对ctypes有一个有趣的问题;虽然它似乎在常规python脚本中工作,但当我在带有printf()的解释器中使用它时,它会在字符串本身之后打印字符串的长度。演示:
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> libc = CDLL("libc.so.6")
>>> libc.printf("Test")
Test4
>>> int = 55
>>> libc.printf("Test %d", int)
Test 557
>>> int = c_int(55)
>>> libc.printf("Test %d", int)
Test 557
有谁知道为什么会这样?
答案 0 :(得分:8)
来自printf(3)手册页:
成功返回后,这些函数返回打印的字符数(不包括用于结束输出到字符串的尾随
’\0’
)。
python解释器在您调用后显示返回代码printf()
。由于您的字符串末尾没有换行符\n
,因此打印输出后会立即打印长度。请注意,只有在交互式使用python时才会在脚本中发生这种情况。
您可以使用作业隐藏此内容:
ret = libc.printf("Test\n")