Спецификатор формата %d
обрабатывает int
, вы передаете ему меньше unsigned char
, а также неправильно передаете указатель (две ошибки).
int ip_parts[4];
sscanf( ip, "%d.%d.%d.%d", &ip_parts[0],
&ip_parts[1],
&ip_parts[2],
&ip_parts[4] ) ;
Вы могли бы писать напрямую в unisigned char
, используя спецификатор формата %hhd
, но модификатор размера hh
поддерживается не всеми библиотеками и будет делать код менее переносимым.Тот факт, что вы использовали тип UI8_t, предполагает, что у вас может не быть стандартного uint8_t, и, возможно, вы не используете C99-совместимую библиотеку или компилятор - в этом случае %hhu
также может не работать.
UI8 ip_parts[4];
sscanf( ip, "%hhu.%hhu.%hhu.%hhu", &ip_parts[0],
&ip_parts[1],
&ip_parts[2],
&ip_parts[4] ) ;