Vous ne devriez pas utiliser la fonction atoi
. En fait, vous devriez oublier qu'il a déjà existé. Il n'a pas d'utilisation pratique. Bien que la réponse de Jack soit correcte en affirmant que les chaînes argv
doivent d'abord être converties en nombres, utiliser atoi
à cet effet (spécifiquement dans le cas où l'entrée provient du "monde extérieur") est un crime contre la programmation en C . Il n'y a pratiquement aucune situation où atoi
peut être utilement utilisé dans un programme.
La fonction que vous devriez utiliser dans ce cas est strtol
char *end;
long long_value = strtol(argv[2], &end, 10);
if (*end != '\0' || errno == ERANGE)
/* Conversion error happened */;
L'état de vérification d'erreur exacte (comme l'exigence d'*end == '\0'
) dépendra en réalité de votre intention.
Si vous souhaitez obtenir un int
à la fin, vous devriez également vérifier la valeur de int
plage (ou pour votre gamme spécifique à l'application)
if (long_value < INT_MIN || long_value > INT_MAX)
/* Out of bounds error */;
int value = long_value;
/* This is your final value */
Vous trouverez peut-être utile de structurer les contrôles de gamme tout en "une ligne", par exemple 'if (a <= b && b <= c)', ce qui représente la signification de 'a <= b <= c'. –