C 언어와 C++에는 모두 sprintf() 함수가 존재합니다. 이 함수는 다양한 데이터를 하나의 문자열 안에 저장하는 데 사용됩니다. 사용 문법은 printf() 함수와 거의 동일하지만, 유일한 차이점은 결과를 저장할 문자열 버퍼를 직접 지정해야 한다는 점입니다.
C++에서는 ostringstream(출력 문자열 스트림)을 사용하여 동일한 작업을 더 안전하고 편리하게 수행할 수 있습니다. ostringstream은 <sstream> 헤더 파일에 정의되어 있으며, 숫자나 실수 등 다양한 타입의 데이터를 자동으로 문자열로 변환해 줍니다. 또한 버퍼 크기를 미리 계산할 필요가 없어 sprintf()보다 버퍼 오버플로우 위험이 적다는 장점도 있습니다.
예제 코드
#include<iostream>
#include<sstream>
using namespace std;
int main() {
string my_str;
ostringstream os;
os << "This is a string. We will store " << 50 << " in it. We can store " << 52.32 << " also.";
my_str = os.str(); // 스트림 내용을 my_str 문자열로 변환
cout << my_str;
}실행 결과
This is a string. We will store 50 in it. We can store 52.32 also.
코드 설명
위 예제에서는 먼저 ostringstream 객체 os를 생성합니다. 그런 다음 << 연산자를 사용하여 문자열, 정수(50), 실수(52.32)를 스트림에 차례대로 삽입합니다. 마지막으로 str() 메서드를 호출하면 스트림에 누적된 모든 내용이 하나의 std::string으로 변환되어 my_str 변수에 저장됩니다.
이처럼 ostringstream은 C 스타일의 sprintf()를 대체하는 현대적인 C++ 방식으로, 타입 안정성과 코드 가독성 면에서 훨씬 우수한 선택입니다.