sscanf 에서 %*d 사용법좀.

jongsuknim의 이미지

제가 보는 책에
sscanf("111222" , "%*d%*d" , 3 , &a , 3 , &b );
하면 a = 111 b = 222
가 된다는 식으로 나왔는데요..막상 해보니 안되네요..
sscanf( "111222" ,"%3d%3d" , &a , &b );
이건 되는데요..
%*d이거 사용법좀 알려 주세요..

kslee80의 이미지

printf 에서는 %*d 하면은 필드값 대신에 아규먼트값이 대체되는게 맞습니다.
즉,
printf("%*d", 5, 20);

printf("%5d", 20);
과 같다고 볼수 있죠.

하지만, scanf 에서 이 * 은 다른 의미를 가집니다.

Quote:

Suppresses assignment. The conversion that follows occurs as
usual, but no pointer is used; the result of the conversion is
simply discarded.

즉, scanf 로 스캔하는 과정에서 해당 부분에 맞는 문자열을 "discard" 한다는
의미입니다.
보통, 일정한 포맷으로 들어오는 입력에서 특정 부분이 필요 없을때 사용하죠.

sscanf("123111", "%*3d%d", &a);
printf("%d\n", a);

를 해 보시면 a 에 111 이 들어가는것을 알수 있습니다..

그리고,
sscanf("123111, "%*3d%d", &a, &b);
라고 적으면
gcc 컴파일러에서 -Wall 옵션을 줬을때

Quote:
warning: too many arguments for format

이라는 에러를 만나게 될 겁니다.