Heim > Backend-Entwicklung > C++ > Wie kann ich strtol korrekt verwenden, um Zeichenfolgen in lange Ganzzahlen umzuwandeln und potenzielle Fehler zu behandeln?

Wie kann ich strtol korrekt verwenden, um Zeichenfolgen in lange Ganzzahlen umzuwandeln und potenzielle Fehler zu behandeln?

Mary-Kate Olsen
Freigeben: 2024-12-25 17:31:14
Original
777 Leute haben es durchsucht

How Can I Correctly Use strtol to Convert Strings to Long Integers and Handle Potential Errors?

Korrekte Verwendung von strtol

Die Funktion strtol konvertiert eine Zeichenfolgendarstellung einer langen Ganzzahl in einen langen Wert. Es ist jedoch wichtig zu verstehen, wie Fehler bei der Verwendung dieser Funktion richtig behandelt werden.

Im angegebenen Code entsteht das Problem aufgrund einer falschen Annahme. Der Code basiert auf der Tatsache, dass der zweite Parameter gleich NULL sein sollte, wenn strtol die Zeichenfolge erfolgreich konvertiert. Diese Annahme trifft jedoch möglicherweise nicht immer zu.

Um Fehler von strtol effektiv zu erkennen, müssen die richtigen Richtlinien zur Fehlerbehandlung befolgt werden:

  • Errno auf 0 setzen vor dem Aufruf von strtol: Standardbibliotheksfunktionen setzen errno nicht auf 0, daher sollte es vor jedem strtol manuell auf Null gesetzt werden call.
  • Überprüfen Sie temp anhand von str und *temp != ' ': Die Fehlerbedingung tritt auf, wenn die Betreffsequenz leer ist oder nicht die erwartete Form hat. Dies wird durch temp == str oder alle nicht erkannten Zeichen nach der Betreffsequenz angezeigt, die durch *temp != ' ' überprüft werden.
  • Wert außerhalb des darstellbaren Bereichs behandeln: Wenn der konvertierte Wert Liegt der Wert außerhalb des darstellbaren Bereichs eines Long-Werts, gibt strtol LONG_MIN, LONG_MAX zurück oder setzt errno auf ERANGE. Dies sollte überprüft werden, um die korrekte Behandlung solcher Fehler sicherzustellen.

Hier ist eine überarbeitete Version der parseLong-Funktion, die diesen Prinzipien entspricht:

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) &amp;&amp; errno == ERANGE)) {
        return false;
    }

    return true;
}
Nach dem Login kopieren
' || ((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 if needed } return val; }

Alternativ zur getrennten Fehlerbehandlung Aus dem Konvertierungsergebnis kann eine modifizierte Schnittstelle verwendet werden:

Das obige ist der detaillierte Inhalt vonWie kann ich strtol korrekt verwenden, um Zeichenfolgen in lange Ganzzahlen umzuwandeln und potenzielle Fehler zu behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage