Come analizzare un numero intero in una stringa glib (gchar *)?
Domanda
Ho una stringa che contiene (le cifre di) un valore intero e voglio ottenere questo valore come int. Sono consapevole che esistono altri metodi per farlo come atoi ()
; comunque, mi piacerebbe davvero usare glib per farlo. Esiste una tale funzione di analisi / conversione?
Soluzione
GLib fornisce gran parte della libreria C standard con controlli di sicurezza per l'input e miglioramenti ove possibile.
La funzione che stai cercando è g_ascii_strtoll ()
.
Addendum pedante
atoi ()
tratta le impostazioni locali allo stesso modo di strtol
E g_ascii_strtoll ()
. Una lettura molto attenta delle manpage e della documentazione di Glib lo rivelerà. Ecco alcuni frammenti per coloro che non possono RTFM :
La funzione atoi () converte la parte iniziale della stringa puntata da nptr in int. Il comportamento è lo stesso di strtol (nptr, (char **) NULL, 10);
tranne che atoi () non rileva errori.
In locali diversi da " C " locale, possono essere accettate anche altre stringhe. (Ad esempio, potrebbe essere supportato il separatore delle migliaia della locale corrente.)
Converte una stringa in un valore gint64. Questa funzione si comporta come la funzione strtoll () standard nella locale C. Lo fa senza effettivamente modificare le impostazioni internazionali correnti, dal momento che non sarebbe thread-safe.
Modifica delle impostazioni internazionali
Se questo non è abbastanza sans-locale, è possibile impostare la locale tramite variabili di ambiente e / o chiamate esplicite a setlocale ()
Altri suggerimenti
GLib è una libreria per scopi generici che fornisce una base comune per lo sviluppo di applicazioni. Questo non significa che GLib reimplementi tutta la libreria C standard, ma invece estrae tutto ciò che non è disponibile (o non coerente) su tutte le piattaforme supportate.
Quindi, in breve, è necessario utilizzare la funzione standard atoi ()
: GLib implementa solo le varianti gdouble
e gint64
.