2013-05-16 8 views
12

Mam strukturę tcp_option_t, która jest N bajtów. Jeśli mam wskaźnik tcp_option_t* opt i chcę, aby był on zwiększany o 1, nie mogę użyć opt++ ani ++opt, ponieważ zwiększy to o sizeof(tcp_option_t), czyli N.Jak zwiększyć wskaźnik o 1 bajt, a nie 1 jednostkę?

Chcę przenieść ten wskaźnik tylko o 1 bajt. Moje obecne rozwiązanie to

opt = (tcp_option_t *)((char*)opt+1); 

, ale jest to trochę kłopotliwe. Czy są jakieś lepsze sposoby?

+0

to chyba jedyne rozwiązanie. – Yuushi

+5

Naprawdę nie chcesz tego robić ... lub, być może, dlaczego, na ziemi, myślisz, że chcesz to zrobić (ponieważ tak naprawdę nie chcesz tego zrobić!)? –

+0

Nie, dokładnie to jest właściwy sposób. Ale dlaczego miałbyś chcieć? –

Odpowiedz

10

Proponuję utworzyć wskaźnik znaku i użyć go do przejścia przez strukturę.

char *ptr = (char*) opt; 
++ptr; // will increment by one byte 

gdy trzeba ponownie przywrócić struct od ptr, zrób zwykły Obsada:

opt = (tcp_option_t *) ptr;