Да, но это уродливо и не может быть проверено на ошибки.
/* assuming `user` and `cmd` are character arrays defined with 42 bytes */
if (sscanf(line, "%41s%*s%*s%*s%*s%*s%*s %41[^\n]", user, cmd) != 2) {
/* handle error */
} else {
/* hopefully ok */
}
Вы можете заменить некоторые из %*s
на %*d
.*
означает, что элемент анализируется, но нигде не назначается (он игнорируется).
В операторе есть 6 игнорируемых элементов, соответствующих элементам между "cm"
и "man sscanf"
в вашем примере.
Также обратите внимание, что я ограничил ввод 41 символом в самом scanf.Убедитесь, что вы не пишете вне объектов.
РЕДАКТИРОВАТЬ: Я добавил пробел перед последним преобразованием, потому что, в отличие от преобразований %s
или %d
, преобразование %[
не пропускает ведущийпробельные.