컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post C언어] localtime_s 함수 사용법: 비주얼 Visual C 2005 이상에서C언어] 세계 시간 시계, 타임존/시차 계산; World-Time TimezonePerl 펄] 세계 시간 시계, 타임존/시차 계산; World-Time Timezone캐논 렌즈를 니콘 디카(DSLR) 마운트에 붙일 수 있나요? 렌즈 호환; Canon Nik...자바스크립트] 세계 시간 구하기, 타임존 설정; JavaScript World-Time T...자바스크립트, 리얼타임 시계 만들기, 1초마다 자동 갱신; JavaScript Real-t...니콘 DSLR] D40X, D40 미러업 촬영, CCD 클리닝 미러락업 기능 있나요? Mu...Perl 펄] 스와치 시계의 인터넷 타임(Swatch Internet Time) 구하기Perl 펄] 루프 건너뛰기, 특정 조건 생략, C의 continue문에 해당하는 예약어 ...Perl 펄] switch문, case문 구현, 스위치 모듈로; default 예약어는?

C언어] sprintf_s 함수 사용법: 비주얼 Visual C 2005 이상에서

Tuesday, May 22, 2007

포맷 출력을 화면이 아닌 문자열로 저장할 때에는 sprintf() 함수를 사용합니다. 그런데 비주얼C 2005 버전에서는 보안이 강화된 sprintf_s() 함수를 사용하는 것이 좋습니다. 그렇지 않으면 컴파일러 설정에 따라, 다음과 같은 경고가 나올 수 있습니다.

sprintf_s.cpp(8) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. D:\Program Files\Microsoft Visual Studio\VC\include\stdio.h(345) : see declaration of 'sprintf'


sprintf_s 함수의 2번째 파라미터에 문자열 버퍼 크기를 지정해 주면 됩니다. 달라진 점은 그것뿐입니다. 다음 예제에서는 sizeof 연산자로 버퍼 크기를 자동으로 지정합니다.

보안 강화된 sprintf_s 함수 사용 예제


소스 파일명: example.cpp
#include <stdio.h>


int main(void) {
  char buf[80]; // 문자열이 저장될 버퍼


  float num = 1.234f;
  sprintf_s(buf, sizeof(buf), "문자 = %0.3f\n", num);

  printf("%s\n", buf);
  // 출력 결과: 문자 = 1.234


  return 0;
}





정태영님께서 지적해 주신 대로, 이번에는 상수를 사용하여 버퍼 크기를 직접 지정하였습니다.

#include <stdio.h>

#define BUF_SIZE 80

int main(void) {
  char buf[BUF_SIZE]; // 문자열이 저장될 버퍼

  float num = 1.234f;
  sprintf_s(buf, BUF_SIZE, "문자 = %0.3f\n", num);

  printf("%s\n", buf);
  // 출력 결과: 문자 = 1.234


  return 0;
}



2 Comments:
At 12:53 PM, Anonymous 정태영 said...

sizeof(buf) 는 char buf[80] 같은 static buffer 라면야 문제가 없겠지만, malloc 등으로 동적할당했다거나, 포인터를 통해 전해진 경우에는 제대로 동작하지 않습니다. :)

char buf[BUF_SIZE];
sprintf( buf, BUF_SIZE, ... 식으로 사용하는게 훨씬 나을 듯 싶습니다.

 
At 2:09 PM, Blogger mwultong said...

저의 귀차니즘 때문에 sizeof를 사용했습니다 ^^;

포인터로 전달된 경우에는 버퍼 크기가 항상 4바이트로 나와서 문제가 되니 이때는 상수로 버퍼 크기를 지정해야겠지요...

(∩_∩;)

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top