2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

printf

작성: sangseek | 게시 날짜: 2025/12/22 | 조회수: 51
[ 편집불가 ]

'printf'는 "print formatted"의 줄임말로, 서식(format)에 따라 데이터를 사람이 읽을 수 있는 문자열로 변환해 출력하는 함수(또는 명령)입니다. 주로 C 표준 라이브러리의 함수로 알려져 있지만, 많은 언어와 셸에도 유사한 기능의 printf 계열이 있습니다. 주요 내용: - 선언(대표적): int printf(const char *format, ...); (헤더: ) - 동작: format 문자열 안의 서식 지정자(placeholder, 예: %d, %s 등)를 대응하는 인수로 치환하여 표준 출력(stdout)에 출력한다. - 반환값: 성공하면 출력한 문자 수(정수), 오류 시 음수 반환. 주요 서식 지정자 예: - %d, %i: 정수(십진수) - %u: 부호 없는 정수 - %o: 8진수, %x/%X: 16진수 - %f, %F: 소수형 실수(십진 표기) - %e/%E: 지수 표기 - %g/%G: %f와 %e 중 상황에 맞는 형태 - %c: 문자 - %s: 문자열 - %p: 포인터(주소) - %n: 지금까지 출력한 문자 수를 정수 포인터에 저장(주의: 보안상 위험 가능) 추가 서식 옵션: - 폭(width)과 정밀도(precision): 예: %8.2f (폭 8, 소수점 이하 2자리) - 플래그: '-', '+', '0', ' ' (space), ' ' 등으로 정렬·부호·패딩 방식 제어 - 길이 지정자: h, l, ll, L, z, t 등으로 인수의 타입 크기 지정 (예: %lld, %zu) 안전과 주의점: - format 문자열과 인수 타입이 일치하지 않으면 정의되지 않은 동작이 발생할 수 있음. 특히 %s에 NULL 전달 등은 치명적 오류를 유발할 수 있음. - 사용자 입력을 그대로 format 문자열로 사용하면 format string 취약점(format-string vulnerability)이 생길 수 있음. 외부 입력은 포맷 문자열이 아닌 인수로 전달하거나, 안전한 함수(snprintf, vsnprintf 등)를 사용해야 함. - sprintf는 버퍼 오버플로우 위험이 있으므로 버퍼 크기를 지정할 수 있는 snprintf 사용 권장. - 출력 버퍼링: stdout은 터미널 연결 시 라인 버퍼링(line-buffered), 파일/파이프는 전부 버퍼링될 수 있으므로 즉시 출력이 필요하면 fflush(stdout) 사용. 관련 함수/명령: - fprintf: 특정 파일 스트림으로 출력 - sprintf/snprintf: 문자열 버퍼로 출력 (snprintf: 길이 제한) - vprintf/vfprintf/vsnprintf: 가변 인자 리스트(va_list) 사용 - 셸(예: bash)의 printf: C 스타일 서식을 지원하는 내장 명령 간단 예: - printf("Hello, %s! You have %d new messages.\n", name, count); 위와 같이 printf는 형식화된 출력의 핵심 도구이며, 포맷 지정자와 타입 일치를 정확히 관리하는 것이 중요합니다.
내용이 부정하다면 싫어요를 누르세요.