开发者

ctypes behaving strangely in Python interpreter

I am having a funny issue with ctypes; while it seems to work in regular python scripts, when I use it in the interpreter with printf() it prints the length of the string after the string itse开发者_如何转开发lf. A demo:

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

Does anyone know why this happens?


From the printf(3) man page:

Upon successful return, these functions return the number of characters printed (not including the trailing ’\0’ used to end output to strings).

The python interpreter is displaying the return code of printf() after you call it. Since you don't have a newline \n at the end of your strings the length is getting printed immediately after the printout. Note that this won't happen in a script, only when you use python interactively.

You could hide this with an assignment:

ret = libc.printf("Test\n")
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜