43 문자열 만들기

프로그램에서 문자열이 중요하게 사용되는 만큼 C 언어에서는 다양한 문자열 처리 함수를 제공합니다. 이번에는 printf처럼 서식을 지정해서 문자열을 생성하는 방법을 알아보겠습니다.

43.1 서식을 지정하여 배열 형태로 문자열 만들기

지금까지 사용한 printf 함수로는 문자열을 화면에만 출력 할 수 있었습니다. 그럼 화면에 출력하지 않고 문자열을 만들어서 따로 저장할 수 없을까요? 이때는 sprintf 함수를 사용하면 서식(format)을 지정하여 문자열을 만들 수 있습니다(stdio.h 헤더 파일에 선언되어 있습니다).

  • sprintf(배열, 서식, 값);
  • sprintf(배열, 서식, 값1, 값2, ...);
    • int sprintf(char * const _Buffer, char const * const _Format, ...);
    • 성공하면 만든 문자열의 길이를 반환, 실패하면 음수를 반환

다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

string_format_array.c

#define _CRT_SECURE_NO_WARNINGS    // sprintf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>     // sprintf 함수가 선언된 헤더 파일

int main()
{
    char s1[20];    // 크기가 20인 char형 배열을 선언

    sprintf(s1, "Hello, %s", "world!");    // "Hello, %s"로 서식을 지정하여 s1에 저장

    printf("%s\n", s1);    // Hello, world!: 문자열 s1 출력

    return 0;
}

실행 결과

Hello, world!

sprintf(s1, "Hello, %s", "world!");처럼 sprintf 함수에 문자열을 저장할 배열과 문자열을 만들 서식 그리고 문자열을 만들 값(문자열)을 순서대로 넣습니다. 이렇게 하면 "Hello, %s"에서 서식 지정자 %s 부분이 "world!"로 바뀌면서 s1"Hello, world!"가 저장됩니다.

보통 s1과 같이 문자열을 저장할 빈 배열을 버퍼(buffer)라고 부릅니다.

그림 43‑1 sprintf 함수를 사용하여 배열 형태로 문자열 만들기

서식 지정자를 사용할 수 있는 만큼 C 언어의 다양한 값(자료형)도 문자열로 만들 수 있습니다.

string_format_char_int_float_array.c

#define _CRT_SECURE_NO_WARNINGS    // sprintf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>     // sprintf 함수가 선언된 헤더 파일

int main()
{
    char s1[30];    // 크기가 30인 char형 배열을 선언

    sprintf(s1, "%c %d %f %e", 'a', 10, 3.2f, 1.123456e-21f);    // 문자, 정수, 실수를 문자열로 만듦

    printf("%s\n", s1);    // a 10 3.200000 1.123456e-21: 문자열 s1 출력

    return 0;
}

실행 결과

a 10 3.200000 1.123456e-21

sprintf(s1, "%c %d %f %e", 'a', 10, 3.2f, 1.123456e-21f);과 같이 sprintf 함수에 서식으로 "%c %d %f %e"를 지정하였습니다. 그리고 각 서식 지정자에 맞게 문자 'a', 정수 10, 소수점 표기 실수 3.2f, 지수 표기법 실수 1.123456e-21f를 넣어주었습니다. 이렇게 하면 지정된 서식에 맞추어 값을 문자열로 만들 수 있습니다. 여기서는 sprintf 함수에 값을 바로 넣었지만 문자, 정수, 실수형 변수를 넣어도 됩니다.

그림 43‑2 sprintf 함수를 사용하여 다양한 서식의 값을 문자열로 만들기
참고 | 입력한 값과 출력된 값이 다르다면?

문자 'a'와 정수 10은 입력한 그대로 문자열로 만들어졌습니다. 하지만 3.2f3.200000으로 만들어졌습니다. 이렇게 나오는 이유는 서식 지정자 %f의 기본 설정이 소수점 아래 6자리까지 출력하도록 되어있기 때문입니다. 참고로 %ef의 기본 설정은 Visual Studio 2015부터 지수를 2자리로 출력하고 2015 이전 버전에서는 3자리로 출력하도록 되어 있습니다. 서식 지정자의 출력 형태나 자릿수를 설정하는 방법은 '부록 2. 서식 지정자'를 참조하세요.