Char* in Int umwandeln in C
-
Verwenden Sie die Funktion
strtol
, umchar*
inint
in C zu konvertieren -
Ordnungsgemäße Überprüfung der Ergebnisse der Funktion
strtol
zur Konvertierung vonchar*
inint
in C
Dieser Artikel erklärt mehrere Methoden, wie man in C char*
in int konvertieren kann.
Verwenden Sie die Funktion strtol
, um char*
in int
in C zu konvertieren
Die Funktion strtol
ist Teil der C-Standardbibliothek und kann char*
-Daten in den vom Benutzer angegebenen Long-Integer-Wert konvertieren. Die Funktion nimmt 3 Argumente entgegen, von denen das erste der Zeiger ist, in dem sich die Zeichenkette befindet. Beachten Sie, dass dieses char
-Zeiger-Argument nicht verändert wird und einen const
-Qualifizierer hat. Das zweite Argument kann verwendet werden, um das erste ungültige Zeichen zu speichern, das gefunden wurde, oder die gesamte Zeichenkette, falls keine Ziffern gefunden wurden. Das dritte Argument gibt die Basis der zu konvertierenden Zahl an, wobei der Wert dieses Arguments zwischen 2 und 36 liegen sollte. Das folgende Beispiel zeigt, wie Sie Elemente aus einem char*
-Array in Ganzzahlen konvertieren und auf der Konsole ausgeben können.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printIntegers(long int arr[], size_t size) {
for (size_t i = 0; i < size; i++) printf("%4ld | ", arr[i]);
printf("\n");
}
int main(int argc, char *argv[]) {
char *arr[] = {"12", "33", "43", "23", "90"};
size_t len = sizeof arr / sizeof arr[0];
long int arr3[len];
for (int i = 0; i < len; ++i) {
arr3[i] = strtol(arr[i], NULL, 10);
}
printIntegers(arr3, len);
exit(EXIT_SUCCESS);
}
Ausgabe:
12 | 33 | 43 | 23 | 90 |
Alternativ kann man auch Programmargumente als Eingabestrings nehmen und sie in Ganzzahltypen konvertieren. Beachten Sie, dass wir int argc, char* argv[]
als Parameter der Funktion main
verwenden müssen, um auf die Programmargumente zuzugreifen und sie zu verarbeiten. Der nächste Beispielcode prüft, ob der Benutzer mindestens ein Argument an das Programm übergeben hat, und wenn nicht, wird das Programm mit einer entsprechenden Fehlermeldung beendet.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printIntegers(long int arr[], size_t size) {
for (size_t i = 0; i < size; i++) printf("%4ld | ", arr[i]);
printf("\n");
}
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: ./%s int1 int2 int3...\n", argv[0]);
exit(EXIT_FAILURE);
}
long int arr2[argc - 1];
for (int i = 0; i < argc - 1; ++i) {
arr2[i] = strtol(argv[i + 1], NULL, 10);
}
printIntegers(arr2, argc - 1);
exit(EXIT_SUCCESS);
}
Ordnungsgemäße Überprüfung der Ergebnisse der Funktion strtol
zur Konvertierung von char*
in int
in C
Obwohl wir im vorigen Beispiel den Aufruf strtol
erfolgreich verwendet haben, um als Programmargumente übergebene Zeichenketten in Ganzzahlen zu konvertieren, besteht eine große Chance, dass das gegebene Programm fehlschlägt. Es wird empfohlen, die Fehlerüberprüfungsroutinen für den strtol
-Funktionsaufruf zu implementieren, um eine robuste Programmausführung mit entsprechender Fehlerprotokollierung zu gewährleisten. Es wird geprüft, ob die konvertierte Ganzzahl im Bereich des Typs long
liegt und ob die Konvertierung selbst erfolglos war. Zusätzlich prüfen wir, ob nach der gültigen Ganzzahl irgendwelche Zeichen stehen und ob die angegebene Eingabe eine Dezimalzahl ist. Beachten Sie, dass wir die Fehlermeldungen in jedem Fall in den Stream stderr
ausgeben und das Programm nicht beenden, aber Sie sollten eine andere Behandlungsroutine nach Ihren Bedürfnissen in Betracht ziehen.
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printIntegers(long int arr[], size_t size) {
for (size_t i = 0; i < size; i++) printf("%4ld | ", arr[i]);
printf("\n");
}
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: ./%s int1 int2 int3...\n", argv[0]);
exit(EXIT_FAILURE);
}
long int num;
char *endptr, *str = argv[1];
errno = 0;
long ret = strtol(str, &endptr, 10);
if (str == endptr) {
fprintf(stderr, "%s: not a decimal number\n", str);
} else if ('\0' != *endptr) {
fprintf(stderr, "%s: extra characters at end of input: %s\n", str, endptr);
} else if ((LONG_MIN == ret || LONG_MAX == ret) && ERANGE == errno) {
fprintf(stderr, "%s out of range of type long\n", str);
} else if (errno != 0 && ret == 0) {
fprintf(stderr, "%s no conversion was performed\n", str);
} else {
num = ret;
printf("num: %ld\n", num);
}
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook