본문 바로가기

BackEnd/C

sprintf & sscanf

반응형

1. sprintf


printf 함수는 출력 대상은 콘솔인 반면,  sprintf 함수는 출력의 대상이 메모리 공간이다.




sprintf 함수의 사용방법과 기능은 printf 함수와 상당히 유사하다. 둘 다 문자열을 조합해서 만들


어 낸 다는 공통점을 지닌다. 다만 printf 함수는 만들어진 문자열을 모니터로 출력하는 반면, 


sprintf 함수는 문자열 배열에 출력을 한다(저장을 한다). 따라서 sprintf 함수는 첫 번째 전달인자


로, 출력의 대상이 되는 문자열 배열의 주소값 정보가 전달되도록 정의되어 있다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main(void)
{
    int num1=24;
    float num2=7.15f;
    char str[]="Hi!";
 
    char strBuf[50];
 
    printf("%d %s %g \n", num1, str, num2);
    sprintf(strBuf, "%d %s %g \n", num1, str, num2);
 
    puts(strBuf);// sprintf 함수에 의해 만들어진 문자열 출력
    return 0;
}
 
cs


1
2
24 Hi! 7.15
24 Hi! 7.15
cs

먼저 위 예제의 11행과 12행을 비교해 보자. 


그러면 printf 함수와 sprintf 함수의 인자 전달구조가 유사함을 알 수 있다. 



위 그림에서 보여주듯이 printf 함수도, sprintf 함수도 변수 num1과 num2, 그리고 문자열 str을 조


해서 새로운 문자열을 구성한다. 단 printf 함수는 이 문자열을 모니터로 출력을 할 뿐이고,


sprintf 함는 첫 번째 인자로 전달된 문자열 배열에 출력(저장)할 뿐이다.


2. sscanf 


scanf 함수는 입력 대상이 콘솔인 반면,  sscanf 함수는 입력의 대상이 메모리 공간이다.


scanf 함수가 키보드를 통해 데이터를 입력 받는 함수라면,


sscanf 함수는 문자열 배열로부터 데이터를 입력 받는(추출하는) 형태의 함수이다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main(void)
{
    int num1;
    float num2;
    char str[20];
 
    sscanf("Hi! 24 3.15""%s %d %g", str, &num1, &num2);
    printf("문자열 추출 데이터: %s %d %g \n\n", str, num1, num2);
 
    printf("문자열 입력: ");
    scanf("%s %d %g", str, &num1, &num2);
    printf("키보드 추출 데이터: %s %d %g \n", str, num1, num2);
 
    return 0;
}

cs


1
2
3
4
문자열 추출 데이터: Hi! 24 3.15
 
문자열 입력: Hi! 24 3.15
키보드 추출 데이터: Hi! 24 3.15

cs


위 예제 9행과 13행의 함수 호출 문을 그림을 통해 비교하면 다음과 같다



위 그림에서 보여주듯이, scanf 함수도 sscanf 함수도 “문자열 정수 실수”의 순으로 데이터를 입력 


받고 있다. 다만 scanf 함수는 키보드로부터 입력을 받고, sscanf 함수는 첫 번째 인자로 전달된 문


자열로부터 입력을받을뿐이다.

반응형