Ответы, данные до сих пор с выделением ограничений sscanf
, неверны! Существует правильный способ сделать это с помощью sscanf:
sscanf(fieldname, "%[^_]_%d", name, &id);
%[^_]
означает чтение, пока не встретится символ подчеркивания. См. Запись для [
на справочной странице для scanf .
Кроме того, обратите внимание на амперсанд перед id
, необходимо передать указатель на id
, чтобы изменить его из-за передачи семантики Си по значению.
Кстати, это действительно вопрос C, а не C ++, так что вы, вероятно, должны были пометить его как таковой. Если вы используете C ++, для разбора есть гораздо лучшие варианты, чем sscanf
.