В вашей строке не было семи значений, поскольку "g" и "s" не являются допустимыми шестнадцатеричными значениями. Поэтому сначала исправьте:
char *str="a:b:c:d:e:f:1";
Затем попробуйте прочитать более четырех значений:
ret = sscanf(str,"%x:%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3],&ret);
Теперь, если существует более четырех значений, этот код будет читать пять из них, и if
не удастся. Я повторно использовал ret
, потому что присвоение возвращаемого значения гарантированно произойдет после. Но если это вас пугает или смущает, вы можете сделать это:
int dummy;
ret = sscanf(str,"%x:%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3],&dummy);