고흐의 연구실/C언어와 C++

[C언어] 수를 문자열로 변환 sprintf(), sprintf_s() 비교

전고흐 2020. 8. 9. 02:17
728x90

sprintf()

  • 정수를 문자열로 변환 가능
  • 헤더 : stdio.h
  • sprintf(문자열, "%d", 정수);
  • sprintf(문자열, "%x", 정수);
  • sprintf(문자열, "%X", 정수);
  • sprintf(문자열, "%f", 실수);

* (참고) %e : 지수표기법

#define _CRT_SECURE_NO_WARNINGS // sprintf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h> // sprintf 함수가 선언된 헤더 파일
int main()
{
    char s1[10]; // 변환한 문자열을 저장할 배열
    int num1 = 283; // 283은 정수
    sprintf(s1, "%d", num1); // %d를 지정하여 정수를 문자열로 저장
    printf("%s\n", s1); // 283
    return 0;
}

 

 

sprintf_s()

  • 버퍼에 포멧을 지정하여 출력하는 함수

  • 헤더 : stdio.h

  • int sprintf_s(char* buffer, size_t size, const char* format, ...);

   - buffer : 출력할 버퍼

   - size : 버퍼 크기

   - format : 포멧 문자열

   - ... : 가변 인자 리스트

//int sprintf_s(char * buffer, const char * format, ...); 버퍼에 포멧을 지정하여 출력하는 함수
//이름, 번호, 등급을 버퍼에 출력한 후 버퍼의 내용을 표준 입력 스트림에 출력
 
#include <stdio.h>
 
int main(void)
{
    char buffer[256];
    char name[20] = "홍길동";
    int num = 23;
    double level = 2.37;
 
    //버퍼에 이름, 번호, 등급을 출력
    sprintf_s(buffer,sizeof(buffer), "이름: %s 번호:%d 등급: %f", name, num, level);
    //버퍼를 표준 입력 스트림에 출력
    puts(buffer);
 
    return 0;
}

 

 

sprintf()와 sprintf_s()의 차이점

 - sprintf 함수는 버퍼의 크기를 전달하지 않아서 함수 내부에서는 버퍼의 크기를 알 수가 없음

728x90