Gestion des erreurs avec strtol
La fonction strtol convertit une chaîne en un entier long. Bien qu'il soit utile pour extraire des données numériques à partir de chaînes, il peut générer des erreurs si la conversion échoue.
Comprendre le comportement de strtol
strtol décompose la chaîne d'entrée en trois parties : caractères d'espacement, un entier représenté dans une base spécifiée (généralement 0 pour octal, 10 pour décimal ou 16 pour hexadécimal) et tous les caractères non reconnus restants. Si la représentation entière n'est pas valide ou si la chaîne contient des caractères non reconnus, aucune conversion n'est effectuée.
Détection d'erreurs
Pour détecter correctement les erreurs avec strtol, il est crucial de définir errno à zéro avant d’appeler la fonction. Cela garantit que toute erreur définira errno sur une valeur non nulle. Après la tentative de conversion, vous pouvez vérifier la valeur de errno. S'il est différent de zéro, une erreur s'est produite.
Modification de la fonction parseLong
Pour améliorer la gestion des erreurs, pensez à modifier votre fonction parseLong comme suit :
static long parseLong(const char *str) { errno = 0; char *temp; long val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE)) { fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n", str, temp); return 0; // or LONG_MIN/LONG_MAX depending on error } return val; }
Cette modification garantit que la fonction renvoie zéro ou la valeur longue minimum/maximum si une erreur se produit, fournissant plus d'informations sur le erreur.
Considérations supplémentaires
D'autres conditions d'erreur que vous voudrez peut-être vérifier incluent :
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!