Je suis sur un Mac OS X 10.6.5 en utilisant XCode 3.2.1 64 bits pour construire un outil de ligne de commande C avec une configuration de construction de 10.6 | Déboguer | x86_64. Je veux passer un entier pair positif comme argument, donc je lance l'indice 1 de argv en int. Cela semble fonctionner, sauf qu'il semble que mon programme obtienne la valeur ASCII au lieu de lire l'ensemble du tableau char et de convertir en une valeur int. Quand j'entre 'progname 10', il me dit que j'ai entré 49, ce qui est aussi ce que j'obtiens quand j'appelle 'progname 1'. Comment puis-je obtenir C pour lire l'ensemble du tableau char comme une valeur int? Google m'a seulement montré (int) * charPointer, mais clairement cela ne fonctionne pas.Comment lancer l'argument du programme * char comme int correctement?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(int argc, char **argv) {
char *programName = getProgramName(argv[0]); // gets the name of itself as the executable
if (argc < 2) {
showUsage(programName);
return 0;
}
int theNumber = (int)*argv[1];
printf("Entered [%d]", theNumber); // entering 10 or 1 outputs [49], entering 9 outputs [57]
if (theNumber % 2 != 0 || theNumber < 1) {
showUsage(programName);
return 0;
}
...
}
Ne jamais utiliser 'atoi()', il pourrait ne pas être disponible et il ne * * non ** erreur de vérification que ce soit: http://stackoverflow.com/questions/2729460/usage-of-atoi-in-the-c-language –
Merci, ça l'a fait. –
@Ivo, atoi est spécifié par le standard C si susceptible d'être partout. Il ne vérifie pas les erreurs, il les signale simplement d'une manière non utile (comme zéro). strtol est une meilleure fonction, sauf pour le code quick throwaway, où il est plus difficile à utiliser. –