On Thu, Jul 10, 2003 at 03:42:04AM -0700, Terry Lambert wrote: > Luigi Rizzo wrote: > > in several places in ipfw2.c i have to move pointers across > > structures of variable length (lists of ipfw2 instructions > > returned by the getsockopt()), and i use the following type of code: > > > > void *next; > > foo *p; > > next = (void *)p + len; > > foo = (foo *)p + len; ^^^^^^^^^^^^^^ sorry i meant p = (void *)p + len; ... > I don't understand the second one. The first one blows up because > you aren't parenthesizing, e.g.: > > next = (void *)(p + len); > > The compiler is complaining because it doesn't know sizeof(*((void *)0)) ok, it actually evaluates to 1 and i thought it was some standard, probably it is not so i guess i have to cast to (char *) instead thanks luigi > (pointer arithmatic is coerced to the type of the lvalue, in most > cases of casts). > > Unless you are referencing them as array elements (in which case, > packing becomes a problem for you, when referencing them as arrays > of foo's, since you don't know how foo's are packed in an array), > you should probably cast them to char for the arithmatic, and add > them with byte counts. > > -- TerryReceived on Thu Jul 10 2003 - 07:40:59 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:14 UTC