Je souhaite analyser un entier, mais mon code suivant accepte également des chaînes telles que "3b" qui commencent par un nombre mais qui ont des caractères ajoutés. Comment rejeter de telles chaînes?analyser un entier sans ajouter de caractère dans C
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int n;
if(argc==2 && sscanf(argv[1], "%d", &n)==1 && n>0){
f(n);
return 0;
}
else{
exit(EXIT_FAILURE);
}
}
Vous n'utilisez pas 'sscanf()'; vous utilisez 'strtol()' ou similaire, et vérifiez où pointe le pointeur de fin. Ou, si vous devez utiliser 'sscanf()', vous utilisez 'int pos; ... si (... && sscanf (argv [1], "% d% n", & n, & pos) == 1) '- notez que le'% n' n'est pas compté comme une conversion donc la comparaison est toujours contre ' 1', pas '2'. Vous vérifiez ensuite si 'argv [1] [pos]' est un octet nul ou non, se plaignant si ce n'est pas le cas. –
http://stackoverflow.com/questions/13199693/what-does-the-n-stand-for-in-sscanfs-d-n-i-n –