Heim > Backend-Entwicklung > C++ > Wie kann ich Fehler beim Konvertieren von Zeichenfolgen in lange Ganzzahlen mithilfe von strtol in C zuverlässig erkennen?

Wie kann ich Fehler beim Konvertieren von Zeichenfolgen in lange Ganzzahlen mithilfe von strtol in C zuverlässig erkennen?

Linda Hamilton
Freigeben: 2024-12-14 20:36:16
Original
563 Leute haben es durchsucht

How Can I Reliably Detect Errors When Converting Strings to Long Integers Using strtol in C?

Erkennen von Fehlern bei der String-zu-Long-Konvertierung mit strtol

In der C-Programmierung wird die Strtol-Funktion häufig zum Konvertieren einer String-Darstellung von a verwendet Long Integer zu seinem numerischen Wert. Die alleinige Verwendung von strtol bietet jedoch möglicherweise nicht immer eine ausreichende Fehlerbehandlung.

Problem:

Der bereitgestellte Code zeigt ein Szenario, in dem das Programm eine Zeichenfolge korrekt in eine lange Ganzzahl konvertiert , gibt aber trotz erfolgreicher Konvertierung auch die Fehlermeldung „Konvertierung nicht möglich“ aus. Dies liegt daran, dass das Programm davon ausgeht, dass bei erfolgreicher Konvertierung der Zeichenfolge durch strtol der zweite Parameter (der eine übrig gebliebene Zeichenfolge anzeigt) NULL sein sollte. Bestimmte Bedingungen können jedoch auch bei erfolgreicher Konvertierung dazu führen, dass nicht-NULL-Zeichenfolgen übrig bleiben.

Lösung:

Um Fehler von strtol genau zu erkennen, sollten Sie die folgenden Verbesserungen in Betracht ziehen:

  1. Verwenden Sie eine spezielle Funktion, um strtol aufzurufen: Dies verbessert die Codeorganisation und Lesbarkeit.
  2. Überprüfen Sie mehrere Fehlerbedingungen: Die Fehlerbehandlung von strtol ist komplex. Zusätzlich zu Resten sollten Sie auch auf ungültige numerische Zeichenfolgen, numerischen Überlauf und führende/nachgestellte Leerzeichen prüfen.
  3. Setzen Sie errno explizit auf 0, bevor Sie strtol aufrufen: Dies stellt sicher, dass errno richtig ist Wird so eingestellt, dass alle aufgetretenen Fehler angezeigt werden.
  4. Auf bestimmte Fehlerwerte prüfen: Für den Fall Überprüfen Sie im Falle eines Fehlers den mit ERANGE (numerischer Überlauf) verknüpften Fehlernummerwert.

Überarbeitete Funktion:

bool parseLong(const char *str, long *val)
{
    char *temp;
    bool rc = true;
    errno = 0;
    *val = strtol(str, &temp, 0);

    if (temp == str || *temp != '<pre class="brush:php;toolbar:false">if (parseLong(str, &value))
    // Conversion successful
else
    // Handle error
Nach dem Login kopieren
' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; }

Verwendung:

Diese überarbeitete Funktion gibt einen booleschen Wert zurück, um anzuzeigen, ob die Konvertierung erfolgreich war oder nicht. Sie können es wie folgt verwenden:

Zusätzliche Hinweise:

  • Sie können die Funktion weiter anpassen, um das Trimmen von Leerräumen zu ermöglichen oder die Konvertierung auf zu beschränken Nur Dezimalwerte.
  • In einigen Szenarien benötigen Sie möglicherweise einen detaillierteren Mechanismus zur Fehlerberichterstattung, z. B. die Rückgabe eines Fehlercodes oder das Auslösen einer Fehlermeldung Ausnahme.

Das obige ist der detaillierte Inhalt vonWie kann ich Fehler beim Konvertieren von Zeichenfolgen in lange Ganzzahlen mithilfe von strtol in C zuverlässig erkennen?. 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