[PD-dev] sending data out using sprintf

Bryan Jurish moocow at ling.uni-potsdam.de
Fri Jun 22 11:52:47 CEST 2007


moin Alain,

I've never passed pointers around between externals myself, but...

On 2007-06-22 04:57:35, <nosehair911 at bellsouth.net> appears to have written:
> I am trying to send some data out of an outlet using a symbol pointer. I have tried using sprintf like 
> martin suggested with little succes. I am sure I am the one doing something wrong. I am getting a 
> pointer symbol but I am not able to convert the pointer back.  In external#1 I have:
> 
> The out ----------------
> IplImage *frame;
> char symstr[10];
> t_symbol *sym;
> sprintf(symstr, "%p", frame);
> sym = gensym(symstr);
> outlet_symbol(x->m_outFrames, sym);
> 
> With this I get an address like:
> symbol 0x1159da0

... looks kosher to me ...

> ...but on the conversion in external#2 I get the problem. The conversion looks like:
> 
> The in-----------------------
> IplImage *in_frame;
> x->in_frame = (IplImage *)atol(s->s_name);
> post("frame %s", x->in_frame);
> post("symbol %s",s->s_name);
>
> ...with this I get this:
> frame (null)
> symbol 0x1159da0

first of all, you probably want to post("frame %p", x->in_frame), rather
than "%s".  Second, in the docs for my atol (here under linux|glibc), I see:

  -- Function: long int atol (const char *STRING)
     This function is similar to the `strtol' function with a BASE
     argument of `10', except that it need not detect overflow errors.
     The `atol' function is provided mostly for compatibility with
     existing code; using `strtol' is more robust.

... so if your atol() is similar, then trying to convert a hex string to
a pointer with atol() is an exercise in futility (since in general,
10!=16).  strtol() ought to work better, auto-detetcting the hex-iness
of the string by its '0x' prefix.  You might also just want to roll out
the big guns and use the "%x" format to scanf(), but strtol() is likely
to be the better way to go.

marmosets,
	Bryan

-- 
Bryan Jurish                           "There is *always* one more bug."
jurish at ling.uni-potsdam.de      -Lubarsky's Law of Cybernetic Entomology




More information about the Pd-dev mailing list