Richtige Verwendung von strtol mit Fehlerbehandlung
Das folgende C- oder C-Programm konvertiert Zeichenfolgen in lange Ganzzahlen und verlässt sich dabei auf die Tatsache, dass strtol zurückgibt NULL für erfolgreiche Konvertierungen. Wenn jedoch der Wert 55 angegeben wird, schlägt es mit der folgenden Meldung fehl:
./convertToLong 55 Could not convert 55 to long and leftover string is: 55 as long is 55
In diesem Artikel wird untersucht, wie Fehler in strtol korrekt erkannt und das Problem im angegebenen Programm behoben werden.
Fehlerbehandlung in strtol
Die offizielle Spezifikation für strtol (und verwandte Funktionen wie strtoll) besagt dass:
Korrigieren des Programms
In C können Fehler von strtol erkannt werden, indem errno auf Null gesetzt wird bevor Sie die Funktion aufrufen. Die modifizierte parseLong-Funktion unten folgt diesem Ansatz:
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) { char *temp; bool rc = true; errno = 0; *val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; }
In C besteht ein flexiblerer Ansatz darin, einen Erfolgs-/Fehlerindikator zurückzugeben und eine separate Funktion zum Extrahieren des konvertierten Werts bereitzustellen:
Fazit
Mit diesen Änderungen behandelt die parseLong-Funktion Fehler von strtol korrekt, sodass Anwendungen den Erfolg oder Misserfolg von ermitteln können Konvertierungen durchführen und Fehler angemessen behandeln.
Das obige ist der detaillierte Inhalt vonWie kann ich Fehler bei der Verwendung von strtol in C und C richtig behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!