La fonction strtol convertit une représentation sous forme de chaîne d'un entier long en une valeur longue. Cependant, il est essentiel de comprendre comment gérer correctement les erreurs lors de l'utilisation de cette fonction.
Dans le code donné, le problème survient en raison d'une hypothèse incorrecte. Le code repose sur le fait que si strtol réussit à convertir la chaîne, le deuxième paramètre doit être égal à NULL. Cependant, cette hypothèse n'est pas toujours vraie.
Pour détecter efficacement les erreurs de strtol, il est nécessaire de suivre les directives appropriées de gestion des erreurs :
Voici une version révisée de la fonction parseLong qui adhère à ces principes :
static long parseLong(const char *str) { errno = 0; char *temp; long val = strtol(str, &temp, 0); if (temp == str || *temp != '<pre class="brush:php;toolbar:false">bool parseLong(const char *str, long *val) { errno = 0; char *temp; *val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) { return false; } return true; }
Alternativement, pour séparer la gestion des erreurs à partir du résultat de la conversion, une interface modifiée peut être utilisée :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!