Im angegebenen C-Programm sieht die Verwendung von Strtol so aus, als würde es das verwenden Tatsache ist, dass erfolgreiche String-zu-Long-Konvertierungen den zweiten Parameter (endptr) auf NULL belassen sollten, um Fehler zu ermitteln. Die angezeigte Fehlermeldung deutet jedoch darauf hin, dass dies nicht immer der Fall ist.
Der richtige Ansatz zur Fehlererkennung in strtol umfasst mehrere Schritte:
1. Errno auf 0 setzen: Standardfunktionen der C-Bibliothek setzen errno nicht auf 0. Wenn Sie dies also manuell vor dem Aufruf von strtol tun, wird sichergestellt, dass alle aufgetretenen Fehler in errno widergespiegelt werden.
2. Überprüfen Sie die Konvertierungsergebnisse: Wenn strtol 0 oder LONG_MIN/LONG_MAX zurückgibt und errno auf ERANGE gesetzt ist, weist dies auf einen Fehler bei der Konvertierung oder einen Wert außerhalb des Bereichs hin.
3. Unterscheiden Sie Fehlertypen: In einigen Fällen müssen Sie möglicherweise zwischen bestimmten Fehlertypen unterscheiden, z. B. nachgestellter Junk-Fehler oder ungültige numerische Formate. Dies kann erreicht werden, indem die Position von endptr und der Fehlerwert in errno überprüft werden.
Hier ist eine überarbeitete Version der parseLong-Funktion:
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; }
Diese Funktion gibt im Fehlerfall 0 zurück, während sie im Fehlerfall den konvertierten Wert zurückgibt erfolgreich.
Die wichtigste Erkenntnis aus dieser Fehleranalyse ist die Verwendung eines umfassenden Fehlerbehandlungsansatzes, der das Festlegen von „errno“, das Überprüfen von Konvertierungsergebnissen und das Unterscheiden von Fehlertypen umfasst. Dies gewährleistet robusten und zuverlässigen Code bei der Arbeit mit String-zu-Numerisch-Konvertierungen.
Das obige ist der detaillierte Inhalt vonWie kann ich Fehler richtig behandeln, wenn ich die Funktion „strtol' von C verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!