I solved it for packoffset() this way, I am sure it works but I am not sure if it may be considered hacky:
char invalid; if (sscanf(reg_string + 1, "%u%c", &reservation.index, &invalid) != 1)
That works, yeah, although I'm not sure it's the most idiomatic thing. %n may be more idiomatic, or just using strtoul() instead.