c / intermediate
Snippet
Robustes numerisches Parsing mit strtol
Im Gegensatz zum einfacheren atoi() bietet strtol() eine robuste Fehlerprüfung und verarbeitet verschiedene Zahlenbasen. Es erkennt Überläufe, leere Eingaben und teilt präzise mit, wo der numerische Teil endet, indem es den 'endptr'-Pointer aktualisiert, was es zum Industriestandard für String-zu-Zahl-Konvertierungen macht.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>#include <stdlib.h>#include <errno.h>int main() {const char *input = " 1024abc";char *endptr;errno = 0;long val = strtol(input, &endptr, 10);if (input == endptr) {printf("No digits were found\n");} else if (errno != 0) {perror("Conversion error");} else {printf("Value: %ld, Remainder: '%s'\n", val, endptr);}return 0;}
Erklärung
1
long val = strtol(input, &endptr, 10);
Konvertiert String in Long zur Basis 10; endptr zeigt auf das erste nicht-numerische Zeichen.
2
if (input == endptr)
Prüft, ob der Pointer sich bewegt hat; wenn nicht, fand keine Konvertierung statt.
3
errno = 0;
Setzt die globale Fehlernummer vor dem Aufruf zurück, um Über-/Unterlauf abzufangen.