Cppcheck ha rilevato un potenziale problema in un codice come questo:Come potrebbero leggere i numeri usando sscanf in crash?
float a, b, c;
int count = sscanf(data, "%f,%f,%f", &a, &b, &c);
Si dice che: "scanf senza limiti di larghezza campo può andare in crash con i dati enorme". Come è possibile? È un bug noto in alcune implementazioni di sscanf? Capisco che i numeri possano traboccare (numericamente), ma come potrebbe il crash del programma? È un falso positivo in cppcheck?
Ho trovato una domanda simile: scanf Cppcheck warning, ma la risposta non è completamente soddisfacente. La risposta menziona la sicurezza del tipo, ma non dovrebbe essere un problema qui.
Prova invece sscanf_s. Come normale scanf, sscanf non è sicuro da overflow. – guitarflow
@guitarflow: il problema è che non vedo dove potrebbe traboccare. –
@guitarflow Oppure no. 'sscanf_s' non è portabile e non è nemmeno sicuro, nonostante ciò che il nome suggerisce e sostiene Microsoft. –