logo

C의 snprintf() 함수

이번 섹션에서는 C 프로그래밍 언어의 snprintf() 함수에 대해 설명합니다. snprintf는 표준 printf() 함수의 출력을 다른 버퍼로 리디렉션하는 stdio.h 헤더 파일의 미리 정의된 라이브러리 함수입니다.

snprint() 함수는 주어진 문자열을 버퍼 영역의 일련의 문자 또는 값으로 형식화하는 데 사용됩니다. snprintf() 함수에는 널 문자를 포함하여 버퍼 영역에 저장되는 최대 문자 수를 나타내는 'n' 인수가 포함되어 있습니다.

snprintf 함수는 버퍼에 삽입되거나 기록된 문자 수도 반환합니다. 그러나 이러한 문자는 print 문의 printf() 함수 또는 stdout 헤더 파일의 문자에 의해 반환되거나 표시됩니다.

C의 snprintf() 함수

참고: snprintf() 함수는 버퍼 크기로도 계산되는 결과 출력 끝에 널 문자를 삽입합니다. 게다가 버퍼는 스트링 형태가 아닌 문자 형태의 요소들만을 저장하는 배열이다.

C의 snprintf() 함수 구문

다음은 C 프로그래밍 언어의 snprintf() 함수 구문입니다.

카트리나 카이프
 int snprintf (char *str, size_t size, const char *format, ?); 

매개변수:

str : 문자형 배열 버퍼입니다.

크기 : 버퍼에 저장할 수 있는 최대 문자 수를 정의합니다.

체재 : C 언어에서 문자열은 stdio.h 헤더 파일에 정의된 printf() 함수와 동일한 유형의 사양을 포함하는 형식을 정의합니다.

…: 선택적(…) 매개변수 또는 인수입니다.

C의 문자열 배열

반환 값:

snprintf() 함수는 널 종료 문자를 포함하지 않고 충분히 큰 버퍼에 대해 기록되거나 저장된 문자 또는 값의 수를 반환합니다. 그리고 쓰여진 문자가 버퍼 크기보다 크면 음수 값을 반환합니다. 그리고 버퍼 크기가 너무 작으면 주어진 문자열이 잘리거나 버퍼 크기에 맞게 줄어듭니다.

웹 브라우저 설정

예제 1: C에서 snprintf() 함수를 시연하는 프로그램

C에서 snprintf() 함수를 이용하여 버퍼 크기를 확인하고, 입력된 문자 수를 버퍼에 반환하는 프로그램을 만들어 보겠습니다.

 /* create an example to use the snprintf function in c. */ #include #include int main () { // declare and initialize the char variable char *r = 'Javatpoint.com'; char buf[100]; // define the size of character type buffer /* use the snprintf() function to return the no. of character founded in the buffer area */ int n = snprintf (buf, 34, '%s 
', r); // 34 represents the size of buffer to store max characters // display the string stored in the buffer and count each character of the buffer area. printf (' The given string is: %s 
 Count the stored character: %d 
', buf, n); return 0; } 

위 프로그램을 실행하면 콘솔 화면에 주어진 출력이 생성됩니다.

 The given string is: Javatpoint.com Count the stored character: 16 

2nd실행

 The given string is: Javatpoint.com Count the stored character: -1 

이제 최대 입력 문자를 34에서 14로 줄였습니다. 이번에는 버퍼 크기가 주어진 문자열보다 작음을 나타내는 음수를 반환합니다.

수동 테스트

예제 2: C에서 snprintf() 함수를 사용하는 프로그램

C 프로그래밍 언어의 snprintf() 함수를 사용하여 버퍼에 문자를 삽입하고 동일한 버퍼에서 반환하는 예제를 만들어 보겠습니다.

 #include #include int main () { char buf[200]; // define the size of character type buffer int ret_val, buf_size = 55; char name[] = &apos;David&apos;; // define string int age = 19; // use the snprintf() function to return the no. of character found in buffer area ret_val = snprintf (buf, buf_size, &apos;Hello friend, My name is %s, and I am %d years old.&apos;, name, age); /* check ret_value should be greater than 0 and less than the size of the buffer (buf_size). */ if ( ret_val &gt; 0 &amp;&amp; ret_val <buf_size) { printf (' buffer is written successfully! 
 '); %s
', buf); no. of characters read: %d', ret_val); } else not completely filled or written. %s 
', the return value: 0; < pre> <p> <strong>When we execute the above program, it produces the given output on the console screen.</strong> </p> <pre> Buffer is written successfully! Hello friend, My name is David, and I am 19 years old. No. of characters read: 53 </pre> <p>In the above program, we declared the character type buffer buf[200], and the buf_size variable can insert the maximum characters is 55. If the given statement is in the defined range, the snprintf() function returns the total no. of characters read from the buffer. </p> <p> <strong>2<sup>nd</sup> execution</strong> </p> <pre> Buffer is not completely filled or written. Hello friend, My name is David and The return value: -1 </pre> <p>When we define the buf_size as 35, the given statement is automatically truncated by the snprintf() function that returns a negative number (-1) and displays &apos;Buffer is not completely filled or written&apos;.</p> <hr></buf_size)>

위 프로그램에서는 문자형 버퍼 buf[200]을 선언했고, buf_size 변수는 최대 55자를 삽입할 수 있습니다. 주어진 명령문이 정의된 범위에 있으면 snprintf() 함수는 총 개수를 반환합니다. 버퍼에서 읽은 문자 수입니다.

2nd실행

 Buffer is not completely filled or written. Hello friend, My name is David and The return value: -1 

buf_size를 35로 정의하면 주어진 명령문은 음수(-1)를 반환하고 '버퍼가 완전히 채워지거나 기록되지 않았습니다'를 표시하는 snprintf() 함수에 의해 자동으로 잘립니다.