HOWTO · C
C에서 형식화된 문자열 만들기
이것은 C 프로그래밍 언어의 문자열 서식 지정에 대한 간략한 문서입니다.
이 페이지의 내용
이 문서에서는 printf() 함수에서 수행하는 것과 같은 방식으로 C 언어를 사용하여 문자열 형식을 지정하는 방법에 대해 설명합니다. 예를 들어 문자열 리터럴과 다른 변수의 값을 결합하여 문자열을 생성하고 그 결과를 문자열에 할당합니다. 향후 사용을 위한 변수입니다.
C 언어에는 형식이 지정된 문자열을 반환하는 내장 라이브러리 메서드가 있습니다. 가장 일반적으로 사용되는 두 가지 기능은 다음과 같습니다.
sprintf()메서드snprintf()메서드
우리는 이 두 가지 기능과 그 예에 대해 논의할 것입니다.
C에서 sprintf() 함수를 사용하여 형식화된 문자열 만들기
sprintf()의 프로토타입은 다음과 같습니다.
int sprintf(char* str, const char* format, ...);
문자열 내용은 형식이 printf에서 사용된 경우 인쇄되는 대신 str이 참조하는 버퍼에 C 문자열로 저장됩니다. 버퍼 크기는 전체 결과 문자열을 보유할 수 있을 만큼 충분히 커야 합니다.
내용 다음에 null 문자가 자동으로 삽입됩니다.
함수에는 이 함수의 두 번째 인수에 사용된 형식 지정자와의 정확한 일대일 대응에 필요한 만큼의 추가 인수가 최소한 필요합니다.
매개변수:
-
char * str결과 문자열이 저장될 문자 포인터입니다. 이 포인터의 크기는 형식에 지정된 모든 데이터를 처리할 수 있을 만큼 충분히 커야 합니다.
-
const char * format또한
printf함수에서 지정하는 모든 사양과 함께 문자열 형식을 포함하는 문자 포인터입니다. -
...함수에는 형식 문자열(또는 n의 경우 저장 위치에 대한 포인터)에 따라 형식 문자열의 형식 지정자를 대체할 값을 각각 보유하는 추가 인수 집합이 필요할 수 있습니다.
이러한 매개변수의 수는 최소한 형식 지정자에 표시된 값의 수와 같아야 합니다. 이 함수는 추가 인수를 무시합니다.
반환 값:
이 함수는 결과 문자열에 기록된 문자 수를 지정하는 int 값을 반환합니다. 이 문자 수에는 문자열 끝에 자동으로 추가되는 null 문자가 포함되지 않습니다.
일부 오류가 있거나 해당 문자열에 아무 것도 기록되지 않은 경우 음수가 반환됩니다.
예:
#include <stdio.h>
int main() {
char arr[60];
int num, i = 4, j = 2;
num = sprintf(arr, "%d plus %d is %d", i, j, i + j);
printf("[%s] string is %d characters long\n", arr, num);
return 0;
}
위 코드의 출력은 다음과 같습니다.
[4 plus 2 is 6] string is 13 characters long
위의 코드 스니펫에서 고정 크기의 문자 배열을 선언한 것을 볼 수 있습니다. 그런 다음 sprintf 함수에서 해당 배열을 사용하여 내용을 저장했습니다.
예를 들어 sprintf 함수의 format 문자열이 지정된 배열의 크기를 초과하면 메모리 오류가 발생하고 프로그램이 비정상 종료됩니다. 이 번거로움을 피하기 위해 이 기능의 더 안전한 버전인 snprintf 기능이 사용됩니다.
C에서 snprintf() 함수를 사용하여 형식화된 문자열 만들기
이 함수의 프로토타입은 다음과 같습니다.
int snprintf(char* s, size_t n, const char* format, ...);
문자열 내용은 형식이 printf에서 사용된 경우 인쇄되는 대신 s가 가리키는 버퍼에 C 문자열로 저장됩니다(n을 채울 최대 버퍼 용량으로 사용).
이 경우 결과 문자열의 크기가 n-1보다 큰 경우 문자열에 대해 나머지 나머지 문자는 모두 버려지지만 반환 값의 문자 수로 계산됩니다.
자료가 작성된 후 null 문자가 자동으로 추가됩니다.
이 함수는 적어도 format 매개변수 뒤에 format에 필요한 만큼의 추가 인수가 필요합니다.
매개변수:
-
char * s결과 문자열 내용을 저장하기 위한 문자 포인터입니다. 이 배열의 크기는 최소한
n자 길이여야 합니다. -
size_t n버퍼에 쓸 최대 문자 수를 알려주는 부호 없는 정수 유형입니다. 쓸 수 있는 최대 문자 수는
n-1이며 문자열 끝에 추가되는 null 문자에 대해 한 문자를 남겨 둡니다. -
const char * format또한
printf함수에서 지정하는 모든 사양과 함께 문자열 형식을 포함하는 문자 포인터입니다. -
...함수에는 형식 문자열(또는 n의 경우 저장 위치에 대한 포인터)에 따라 형식 문자열의 형식 지정자를 대체할 값을 각각 보유하는 추가 인수 집합이 필요할 수 있습니다.
이러한 매개변수의 수는 최소한 형식 지정자에 표시된 값의 수와 같아야 합니다. 이 함수는 추가 인수를 무시합니다.
반환 값:
이 함수는 종료 null 문자를 제외하고 버퍼에 성공적으로 쓰여진 문자 수를 반환합니다. 오류가 있는 경우 음수를 반환합니다.
반환된 값이 0보다 크고 지정된 버퍼 크기보다 작으면 문자열이 완전히 기록됩니다.
예:
#include <stdio.h>
int main() {
char arr[100];
int count;
count = snprintf(arr, 100, "The double of %d is %d", 5, 5 * 2);
if (count >= 0 && count < 100) // check returned value
printf("The resultant string is: %s", arr);
else
printf("Not successfully written");
return 0;
}
출력:
The resultant string is: The double of 5 is 10