Почему бы это не сработало?
const char* ip = "192.168.1.4";
unsigned int ip4[4];
sscanf(ip,"%o.%o.%o.%o",ip4,ip4+1,ip4+2,ip4+3); // doesn't work
sscanf(ip,"%d.%d.%d.%d",ip4,ip4+1,ip4+2,ip4+3); // works
Я проверил справочные страницы для scanf (3), и в нем четко указано, что% o вполне приемлемо.