У вас есть две проблемы здесь. Во-первых
%lu64
должно быть
"%" SCNu64
для чтения в 64-битном целом числе.
Второй выпуск -
%[B, K, M, G]
требует char*
или wchar_t*
в качестве выходного параметра, поскольку он заполняет c-строку. Вам нужно изменить
char c;
по крайней мере
char c[2] // 2 because it adds a null terminator
в порядке захвата K
. Мы собрали все это вместе и получили
auto ret = std::sscanf("111K", "%" SCNu64 "%[B, K, M, G]", &ui, c);
Обратите внимание, что
%[B, K, M, G]
фактически пытается сопоставить все пробелы и запятые внутри скобок. Вы также можете написать это как
%[BKMG]
и получите те же результаты.