martedì 4 marzo 2008

atoi o strtol?

Nel corso di Sistemi Operativi dell'Università di Modena e Reggio Emilia gli studenti devono spesso realizzare programmi C (per Unix) che accettino argomenti da riga di comando. Spesso tali argomenti devono essere convertiti in numeri, e per questo agli studenti viene illustrato il funzionamento della funzione atoi(3). Il problema è che la funzione atoi(3), come da pagina di manuale non rileva errori di conversione.
Sarebbe molto più corretto spingere gli studenti ad usare l'alternativa e più sicura strtol(3), che se non altro rileva gli errori.


Quindi, in un programma C, supponendo di voler convertire il secondo parametro passato sulla linea di comando, si avrebbe che:

val = atoi( argv[2] );

deve essere sostituito da:
errno = 0;
val = strtol( argv[2], (char**) NULL, 10 );
if( errno > 0 && val == 0 )
perror("\nErrore di conversione numerica\n");



Certo, il blocco di codice riportato qui sopra risulta di ben lunga più lungo che l'uso della semplice atoi(3), ma consente anche un controllo migliore e più raffinato. Inoltre abitua gli studenti a lavorare con gli strumenti corretti da subito.

Nessun commento: