Cppcheck wykrył potencjalny problem w kodzie tak:W jaki sposób można odczytać liczby przy awarii sscanf?
float a, b, c;
int count = sscanf(data, "%f,%f,%f", &a, &b, &c);
Mówi ona, że: „scanf bez ograniczeń szerokości pole może upaść z ogromnym danych”. Jak to możliwe? Czy jest to znany błąd w niektórych implementacjach sscanf? Rozumiem, że liczby mogą się przepełnić (liczbowo), ale w jaki sposób program może się zawiesić? Czy to jest fałszywy pozytyw w cppcheck?
Znalazłem podobne pytanie: scanf Cppcheck warning, ale odpowiedź nie jest całkowicie satysfakcjonująca. W odpowiedzi wspomniano o bezpieczeństwie typu, ale nie powinno to stanowić problemu.
Zamiast tego spróbuj sscanf_s. Jako normalny scanf, sscanf nie jest bezpieczny w przepełnieniu. – guitarflow
@guitarflow: Problem polega na tym, że nie widzę miejsca, w którym może się on przepełnić. –
@guitarflow Lub nie. 'sscanf_s' nie jest przenośny, a także nie jest faktycznie bezpieczny, pomimo tego, co sugeruje nazwa, a Microsoft twierdzi. –