printf의 기능 중 몰랐던 것들을 정리한다.


1. Width field을 이용해 loop 없이 공백 입력하기

printf format 중 *는 폭을 지정하는데, 이를 이용해서 가변 길이의 공백을 loop문 없이 입력할 수 있다.


printf("%*c", n, ' '); <= 변수 n에 0보다 큰 값을 넣으면 그 만큼 공백을 넣는다.


유사하게 %*s를 이용해도 결과는 같다.

printf("%*s", n, " ");


2. Precision field

%.*s 는 최대 아웃풋 길이를 지정해줄 수 있다.

printf("%.*s", n, buf); <= buf를 출력하되, 최대 n 길이만큼만 출력한다.


3. %n

printf 의 형식 지정자 중 유일하게 화면에 출력하는 것이 아닌 parmeter로 받은 포인터에 "지금까지 출력한 문자 개수"를 입력한다.

printf("100%n", p); <= int* p에 지금까지 100 세 글자를 입력했으므로 3을 입력한다.


4. printf(변수명)

printf에 꼭 printf("문자열", 인수1, 인수2, ...) 이렇게 하지 않고 변수 하나만 넘길 수도 있다.

이때 변수에 format specifier (%d, %n)등을 이용하면 printf에 인자가 모자라게 되므로, 보안 문제가 발생하게 되니 유의한다.





참고한 링크

https://en.wikipedia.org/wiki/Printf_format_string#Width_field

https://stackoverflow.com/questions/25609437/print-number-of-spaces-using-printf-in-c

https://stackoverflow.com/questions/18526978/s-format-specifier-in-printf-statement-in-c

https://www.coursera.org/learn/software-security (3, 4번 항목)

'프로그래밍 > C++' 카테고리의 다른 글

인라인 함수  (0) 2017.10.08
함수 오버로딩  (0) 2017.10.08
디폴트 파라미터  (0) 2017.10.08
표준 입력 cin  (0) 2017.08.06
표준 출력 cout  (0) 2017.08.06

+ Recent posts