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:
Ü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
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:
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!