La fonction "string to long" (strtol
) est standard pour cela. Utilisation de base:
#include <stdlib.h>
int arg = strtol(argv[1], NULL, 10);
// string to long(string, endptr, base)
Puisque nous utilisons le système décimal, la base est 10. L'argument endptr
sera réglé sur le « premier caractère invalide », à savoir le premier non chiffres. Si cela ne vous intéresse pas, définissez l'argument sur NULL
au lieu de transmettre un pointeur. Si vous ne voulez pas non chiffres à se produire, vous pouvez vous assurer qu'il est réglé sur la « terminaison null » (une \0
termine une chaîne en C):
#include <stdlib.h>
char* p;
int arg = strtol(argv[1], &p, 10);
if (*p != '\0') // an invalid character was found before the end of the string
Comme le man page mentionne, vous pouvez utiliser errno
à vérifiez qu'aucune erreur ne s'est produite (dans ce cas, débordements ou sous-flux).
#include <stdlib.h>
#include <errno.h>
char* p;
errno = 0;
int arg = strtol(argv[1], &p, 10);
if (*p != '\0' || errno != 0) return 1;
// Everything went well
printf("%d", arg);
Au-delà de cela, vous pouvez mettre en œuvre des contrôles personnalisés: tester si l'utilisateur a passé un argument du tout; tester si le nombre est dans les plages autorisées;
Je sais que cnicutar a déjà donné la réponse, mais cela aide à comprendre ce qui se passe. Savez-vous ce que argv [1] est exactement? Je veux dire, pouvez-vous expliquer pourquoi vous obtenez la sortie que vous obtenez? –
À mon avis, argv [0] est la commande elle-même et argv [1] est le premier paramètre I d'entrée. Dans ce cas est 7. – Michael
Oui, c'est vrai, mais qu'est-ce que c'est? Quel genre? Que pouvez-vous faire avec? Pourquoi obtenez-vous la sortie que vous obtenez dans l'exemple ci-dessus? Pouvez-vous faire l'addition ou la multiplication avec lui, et si l'utilisateur ne tape pas un nombre, mais './test seven' ou quelque chose? –