정수를 구문 분석하려고하지만 다음 코드는 숫자로 시작되지만 문자가 추가 된 "3b"와 같은 문자열도 허용합니다. 그러한 문자열을 어떻게 거부합니까?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);
}
}
당신은'sscanf()'를 사용하지 않습니다; 당신은'strtol()'또는 유사한 것을 사용하고, 끝 포인터가 가리키는 곳을 체크한다. 아니면'sscanf()'를 사용해야한다면,'int pos; ... if (... && sscanf (argv [1], "% d % n", & n, & pos) == 1)''% n'은 변환으로 간주되지 않으므로 비교는 여전히' 1 '이 아니라'2 '입니다. 그런 다음'argv [1] [pos]'가 널 바이트인지 아닌지를 불평하면서 확인한다. –
http://stackoverflow.com/questions/13199693/what-does-the-n-stand-for-in-sscanfs-d-n-i-n –