Jean-Alexandre Peyroux wrote:
> Hello,
> 
> I think i did not understand the handling character string. This is an  
> example :
> 
> user.pyx :
> 
> cdef class User:
>     def __init__(self, char* name):
>         self.cname = name
> 
>     cpdef printName(self):
>         print "My name is %s" % self.cname
> 
> user.pxd :
> 
> cdef class User:
>     cdef readonly char* cname
> 
>     cpdef printName(self)
> 
> 
<snip>
> In [5]: u.cname
> Out[5]: '_3'
> 
> I do not understand. My string is completely random, as if it was  
> pointing in the wrong location of memory.
> I missed step ?

This is expected. When you do "self.cname = name", then you get a 
pointer to the character buffer inside the "name" string object. Then, 
"name" goes out of scope and is deallocated, along with its memory, and 
perhaps filled with something else.

Moral? Only use conversion to char* when you really need it because you 
call C code or similar, and also then you need to hold on to the 
corresponding Python string as well.

-- 
Dag Sverre
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to