Ответы, данные до сих пор, верны, если ваша строка отформатирована так, как вы ожидаете. Вы должны всегда проверять возвращаемое значение sscanf, чтобы убедиться, что все работает хорошо. sscanf возвращает количество успешно выполненных преобразований в приведенном выше случае 4.
if (4 != sscanf(buf, "%d %d %d %d", &a, &b, &c, &d))
{
/* deal with error */
}
Если бы buf был "1 2 3" или "1 2 a b" или что-то еще, sscanf вернул бы короткий счетчик элементов.