Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ctypes behaving strangely in Python interpreter

Tags:

python

ctypes

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 itself. 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?

like image 526
Scribble Master Avatar asked Feb 27 '23 09:02

Scribble Master


1 Answers

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")
like image 159
John Kugelman Avatar answered Mar 06 '23 21:03

John Kugelman