Maison > développement back-end > C++ > Comment puis-je gérer de manière robuste les erreurs lors de l'utilisation de strtol pour convertir des chaînes en entiers longs ?

Comment puis-je gérer de manière robuste les erreurs lors de l'utilisation de strtol pour convertir des chaînes en entiers longs ?

Mary-Kate Olsen
Libérer: 2024-12-15 15:08:34
original
603 Les gens l'ont consulté

How Can I Robustly Handle Errors When Using strtol to Convert Strings to Long Integers?

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;
}
Copier après la connexion

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 :

  • Caractères indésirables de fin après la représentation entière
  • Chaîne numérique invalide (par exemple, "abc")
  • Valeur également grand ou trop petit pour le type de données long

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