이번 항목은 문자열을 포맷시키는 sprintf 함수의 문제점을 알아보고, sprintf 의 대안들이 왜 더 좋은지에 대한 이야기를 하는 항목이다.


1. sprintf 는 무엇이며, spinrtf 대신 사용 할 수 있는 표준 함수들을 모두 나열하라.

snprintf, std::stringstream, std::strstream 이렇게 있다. 나는 stringstream의 존재를 이번달에 알게 되었다. 만약 책을 안보았더라면, ... 계속 몰랐을 것이다.


2. sprintf 의 주된 강점과 약점을 구체적으로 서술하라.

강점

사용하기 무척편하며, 버퍼를 직접 사용하여, 빠르다.


약점

길이 안전성을 제공해 주지 않고 있다. 이것은 헤아릴수 없는 문제들을 동반해 준다. 그리고 형식 안전성을 제공하지 않고 있다. 예를 들자면, sprintf( buf, "%4c", i ); 이게 올바른 것으로 처리가 된다. 이것을 템플릿으로 처리 할 수도 없다. 왜냐하면, 인자가 2개 이상이라면, .. 손 쓸 방법이 없기 때문이다.


여담, KGC2008에서 MS사의 강사가 했던 말 중에, 꼭 문자열을 직접 제어할 때, 즉, 메모리를 직접 제어해야 할 땐, 길이 안전성이 있는 함수만을 사용해야 한다는 강조된 말이 있었다. 그래서 자사제품 중, 최소한 MSVC2005 이상은 써야 한다고 했었다.


총평

.. ... 지금 이 문제를 겪었던 나로써는 .. .. 절대적으로 공감한다. .. 절대 메모리를 사용 할땐, 길이 안전성을 제공하는 함수만 사용하거나, 길이 안전성도 제공해야만 한다.

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요