Hi,

With "%lu" you tell sprintf to expect a 32 bit value on the stack,  
while in fact you put 64 bit sized value 0 there. That reads like two  
times 32 bit sized value 0, hence the results you see.

The rest is left as an exercise to the reader ;)

Thanks,
Jaap

Send from my iPhone

On 2 jun 2010, at 06:01, Ian Schorr <[email protected]> wrote:

> Hello list,
>
> This isn't exactly a Wireshark-specific question, but it's coming up
> while I'm working on a dissector, and I'm sure someone here will know
> the answer, so...  =)
>
> I'm trying to use sprintf() to append to an existing string with some
> formatted text.  Obviously there's several ways to do this, but
> sprintf() seemed to be most efficient for the way I'm doing things.  I
> end up appending this string to the Info Column later, but that seems
> irrelevant.
>
> For example, I have 4 variables:
> - string mystring, with value "LOCK"
> - guint32 last_fh_hash, with value "2056735708"
> - guint64 file_offset, with value 0
> - guint64 lock_length, with value 10
>
> The weird thing is that when I do this:
>
> sprintf (mystring, "%s FH: 0x%08x Offset: %lu Length: %lu",
> mystring,last_fh_hash,file_offset,lock_length);
>
> ...then "mystring" becomes "LOCK FH: 0x7a974bdc Offset: 0 Length: 0".
> Length is WRONG.  It is wrong in a very consistent way.
>
> But if I do this:
>
> sprintf (mystring, "%s FH: 0x%08x", mystring,last_fh_hash);
> sprintf (mystring, "%s Offset: %u", mystring,file_offset);
> sprintf (mystring, "%s Length: %u", mystring,lock_length);
>
> Then the resulting value of mystring is correct.  "LOCK FH: 0x7a974bdc
> Offset: 0 Length: 10".  In fact, if I flip the positions of
> "file_offset" and "lock_length" then things are fine, regardless of
> their values.
>
> It's difficult to reproduce or debug.  I have a number of similar
> statements scattered throughout code and each has varying degrees of
> strangeness.  Some work properly.  In some cases the values are
> actually flipped (one variable printed one place, the other in
> another).  In some cases the values are actually empty.  I can't
> imagine it has anything to do with the way the string was declared or
> memory allocated in the first place, it looks like sprintf() is simply
> writing out the wrong values to memory for some reason.
>
> Anybody have any thoughts on why that might be?  I'm assuming I've
> done something silly, though having a tough time guessing where.
>
> I haven't tested yet to see if this is something specific to the dev
> platform I'm using.  At the moment that's Windows.
>
> Thanks,
> Ian
> ___________________________________________________________________________
 

> Sent via:    Wireshark-dev mailing list <[email protected]>
> Archives:    http://www.wireshark.org/lists/wireshark-dev
> Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
>             mailto:[email protected]?subject=unsubscribe
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <[email protected]>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:[email protected]?subject=unsubscribe

Reply via email to