Ich möchte eine ganze Zahl analysieren, aber mein folgender Code akzeptiert auch Strings wie "3b", die als eine Zahl beginnen, aber angehängt haben Zeichen. Wie lehne ich solche Strings ab?parse Ganzzahl ohne anhängen char in 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);
}
}
Sie verwenden nicht 'sscanf()'; Sie verwenden 'strtol()' oder ähnliches und prüfen, wo der Endzeiger zeigt. Oder, wenn Sie 'sscanf()' verwenden müssen, verwenden Sie 'int pos; ... if (... && sscanf (argv [1], "% d% n", & n, & pos) == 1) '- Beachten Sie, dass'% n' nicht als Umrechnung gewertet wird, so dass der Vergleich immer noch 'ist 1', nicht '2'. Sie prüfen dann, ob 'argv [1] [pos]' ein Nullbyte ist oder nicht, und klagt, ob das nicht der Fall ist. –
http://StackOverflow.com/Questions/13199693/what-does-the-n-stand-for-in-in-sscanfs-d-n-i-n –