Почему scanf возвращает неверное значение для переменной типа size_t?
char hmac[40];
auto scan_count = sscanf(cookie.c_str(), cookie_format, &uid, &hmac);На входных данных:
uid=20364-726552704a0366dc3e0ca627e6ebacdeb8ecff70
получаем следующее:
uid=20224 hmac=726552704a0366dc3e0ca627e6ebacdeb8ecff70
Потому что hmac[40], а должен быть hmac[41] судя по тому, что в строке 40 символов. Переполнение буфера, все дела. И %s лучше заменить на %40s
Вы уверены что входные данные верны? Попробуйте передать просто строку. Такой код дает на выходе ровно то что ожидается: 20364-726552704a0366dc3e0ca627e6ebacdeb8ecff70size_t uid;
char hmac[41] = "";
sscanf("uid=20364-726552704a0366dc3e0ca627e6ebacdeb8ecff70", "uid=%zu-%s", &uid, &hmac[0]);
printf("%zu-%s\n", uid, hmac);