C에서 형식화된 문자열 만들기

Muhammad Husnain 2023년10월12일
  1. C에서 sprintf() 함수를 사용하여 형식화된 문자열 만들기
  2. C에서 snprintf() 함수를 사용하여 형식화된 문자열 만들기
C에서 형식화된 문자열 만들기

이 문서에서는 printf() 함수에서 수행하는 것과 같은 방식으로 C 언어를 사용하여 문자열 형식을 지정하는 방법에 대해 설명합니다. 예를 들어 문자열 리터럴과 다른 변수의 값을 결합하여 문자열을 생성하고 그 결과를 문자열에 할당합니다. 향후 사용을 위한 변수입니다.

C 언어에는 형식이 지정된 문자열을 반환하는 내장 라이브러리 메서드가 있습니다. 가장 일반적으로 사용되는 두 가지 기능은 다음과 같습니다.

  1. sprintf() 메서드
  2. 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
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

관련 문장 - C String