이번 항목은 문자열을 포맷시키는 sprintf 함수의 문제점을 알아보고, sprintf 의 대안들이 왜 더 좋은지에 대한 이야기를 하는 항목이다.
1. sprintf 는 무엇이며, spinrtf 대신 사용 할 수 있는 표준 함수들을 모두 나열하라.
snprintf, std::stringstream, std::strstream 이렇게 있다. 나는 stringstream의 존재를 이번달에 알게 되었다. 만약 책을 안보았더라면, ... 계속 몰랐을 것이다.
2. sprintf 의 주된 강점과 약점을 구체적으로 서술하라.
강점
사용하기 무척편하며, 버퍼를 직접 사용하여, 빠르다.
약점
길이 안전성을 제공해 주지 않고 있다. 이것은 헤아릴수 없는 문제들을 동반해 준다. 그리고 형식 안전성을 제공하지 않고 있다. 예를 들자면, sprintf( buf, "%4c", i ); 이게 올바른 것으로 처리가 된다. 이것을 템플릿으로 처리 할 수도 없다. 왜냐하면, 인자가 2개 이상이라면, .. 손 쓸 방법이 없기 때문이다.
여담, KGC2008에서 MS사의 강사가 했던 말 중에, 꼭 문자열을 직접 제어할 때, 즉, 메모리를 직접 제어해야 할 땐, 길이 안전성이 있는 함수만을 사용해야 한다는 강조된 말이 있었다. 그래서 자사제품 중, 최소한 MSVC2005 이상은 써야 한다고 했었다.
총평
.. ... 지금 이 문제를 겪었던 나로써는 .. .. 절대적으로 공감한다. .. 절대 메모리를 사용 할땐, 길이 안전성을 제공하는 함수만 사용하거나, 길이 안전성도 제공해야만 한다.
'책 정리 > Exceptional C++ Style' 카테고리의 다른 글
항목 10 : export의 한계, 2부 : 상호작용, 유용성 문제, 지침들 ( 난이도 : 9 ) (1) | 2009.01.13 |
---|---|
항목 9 : export의 한계, 1부 : 기초 ( 난이도 : 7 ) (1) | 2009.01.13 |
항목 8 : 템플릿 친구 만들기 ( 난이도 : 4 ) (1) | 2009.01.12 |
항목 7 : 함수 템플릿을 특수화하지 말아야 하는 이유 ( 난이도 : 8 ) (4) | 2009.01.09 |
항목 6 : 여러 수준의 일반성, 2부 : 충분히 일반적인가? ( 난이도 : 7 ) (0) | 2009.01.08 |
항목 5 : 여러 수준의 일반성, 1부 : 기초 ( 난이도 : 4 ) (2) | 2009.01.02 |
항목 4 : 표준 라이브러리 멤버 함수 ( 난이도 : 5 ) (0) | 2008.12.31 |
항목 3 : 문자열 포매팅, 2부 : 표준의 세련된 대안들 (0) | 2008.12.29 |
항목 1 : vector의 올바른 용법과 잘못된 용법 ( 난이도 : 4 ) (0) | 2008.12.23 |
Exceptional C++ Style 책을 보기 시작하다. (0) | 2008.12.23 |
최근댓글