Περισσότερα
Πώς να μετατρέψετε μια συμβολοσειρά σε ακέραιο αριθμό στη C;
Προσπαθώ να μάθω αν υπάρχει εναλλακτικός τρόπος μετατροπής συμβολοσειράς σε ακέραιο στη C.
Στον κώδικά μου έχω τακτικά το ακόλουθο μοτίβο.
char s[] = "45";
int num = atoi(s);
Οπότε, υπάρχει καλύτερος τρόπος ή άλλος τρόπος;
235
3
Υπάρχει το
strtol
το οποίο είναι καλύτερο ΙΜΟ. Επίσης, μου αρέσει τοstrtonum
, οπότε χρησιμοποιήστε το αν το έχετε (αλλά θυμηθείτε ότι δεν είναι φορητό):EDIT
Μπορεί επίσης να σας ενδιαφέρουν οι
strtoumax
καιstrtoimax
οι οποίες είναι τυπικές συναρτήσεις της C99. Για παράδειγμα, θα μπορούσατε να πείτε:Τέλος πάντων, μείνετε μακριά από την
atoi
:Μην χρησιμοποιείτε συναρτήσεις από την ομάδα
ato...
. Αυτές είναι χαλασμένες και πρακτικά άχρηστες. Μια μετρίως καλύτερη λύση θα ήταν να χρησιμοποιήσετε τηνsscanf
, αν και ούτε αυτή είναι τέλεια.Για τη μετατροπή συμβολοσειράς σε ακέραιο, θα πρέπει να χρησιμοποιούνται συναρτήσεις από την ομάδα
strto...
. Στη δική σας περίπτωση θα ήταν η συνάρτησηstrtol
.Ναι, μπορείτε να αποθηκεύσετε τον ακέραιο αριθμό απευθείας:
Αν πρέπει να αναλύσετε μια συμβολοσειρά, το
atoi
ή τοstrol
θα κερδίσει το διαγωνισμό "συντομότερος κώδικας".