Maison > développement back-end > C++ > Comment puis-je gérer correctement les erreurs lors de l'utilisation de la fonction « strtol » de C ?

Comment puis-je gérer correctement les erreurs lors de l'utilisation de la fonction « strtol » de C ?

Susan Sarandon
Libérer: 2024-12-18 14:57:10
original
192 Les gens l'ont consulté

How Can I Properly Handle Errors When Using C's `strtol` Function?

Gestion appropriée des erreurs pour la fonction strtol de C

Détection d'erreurs dans strtol

Dans le programme C donné, l'utilisation de strtol semble utiliser le le fait que les conversions réussies de chaîne en chaîne longue doivent laisser le deuxième paramètre (endptr) égal à NULL pour déterminer les erreurs. Cependant, le message d'erreur affiché suggère que ce n'est pas toujours le cas.

Méthodologie de gestion correcte des erreurs

L'approche correcte de la détection des erreurs dans strtol implique plusieurs étapes :

1. Définissez errno sur 0 : Les fonctions de la bibliothèque C standard ne définissent pas errno sur 0, donc le faire manuellement avant d'appeler strtol garantit que toutes les erreurs rencontrées seront reflétées dans errno.

2. Vérifiez les résultats de conversion : Si strtol renvoie 0 ou LONG_MIN/LONG_MAX avec errno défini sur ERANGE, cela indique une erreur de conversion ou une valeur hors plage.

3. Distinguer les types d'erreur : Dans certains cas, vous devrez peut-être faire la différence entre des types d'erreur spécifiques, tels que des fichiers indésirables de fin ou des formats numériques non valides. Ceci peut être réalisé en vérifiant la position de endptr et la valeur d'erreur dans errno.

Implémentation de la fonction révisée

Voici une version révisée de la fonction parseLong :

static long parseLong(const char *str)
{
    char *temp;
    errno = 0;  // Reset errno
    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;  // Handle errors by returning a specific value like 0
    }

    return val;
}
Copier après la connexion

Cette fonction renvoie 0 en cas d'erreur, tout en renvoyant la valeur convertie si réussi.

Conclusion

Le principal point à retenir de cette analyse des erreurs est d'utiliser une approche complète de gestion des erreurs qui implique la définition du numéro d'erreur, la vérification des résultats de conversion et la distinction des types d'erreur. Cela garantit un code robuste et fiable lorsque vous travaillez avec des conversions de chaîne en numérique.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal