Одной из проблем является то, что у вас есть символы |
трубы, разделяющие строки в ваших данных, но ваш формат sscanf()
ищет класс символов [^!]
(все, кроме восклицательных знаков). Вы также должны указать размер буфера для классов символов и проверить возвращаемое значение:
char com[10], f[100], s[100];
if (sscanf(reply, "%9[^|]|%99[^|]|%99[^|]", com, f, s) != 3)
...format error...
Обратите внимание на использование 9 и 99; Вы должны указать размер, оставляющий место для терминала, равным нулю.