C++에서 문자열 포맷팅 방법 정리
😢상황
- C++ 코드에서 숫자, 문자열, 변수를 조합하여 포맷팅된 문자열을 만들고 싶음
- C언어 스타일
sprintf
, 현대 C++std::format
, 스트림 기반ostringstream
등 다양한 방법이 있어 헷갈림
🛠️해결법
방법 1: std::format
(C++20 표준)
#include <format>
#include <string>
std::string result = std::format("이름: {}, 나이: {}", "홍길동", 30);
💡 가독성이 매우 좋고, 타입 안전성이 뛰어남
💡 Visual Studio 2022, gcc 13 이상 등에서 지원
방법 2: std::ostringstream
#include <sstream>
#include <string>
std::ostringstream oss;
oss << "이름: " << "홍길동" << ", 나이: " << 30;
std::string result = oss.str();
🔹 스트림 조합 방식, 다양한 타입을 « 연산자로 연결 가능
방법 3: sprintf
(C 스타일)
#include <cstdio>
char buffer[100];
sprintf(buffer, "이름: %s, 나이: %d", "홍길동", 30);
std::string result = buffer;
🔸 간단하지만, 버퍼 오버플로우 위험이 있으므로 신중하게 사용해야 함
🔸 가능하면snprintf
처럼 안전한 버전 사용 권장
보너스: fmt
라이브러리 사용
#include <fmt/core.h>
std::string result = fmt::format("이름: {}, 나이: {}", "홍길동", 30);
💡
std::format
과 거의 동일한 문법을 제공하며, C++20 이전 버전에서도 사용 가능
💡 빠르고 강력한 포맷팅 라이브러리 (fmtlib)
✅정리: 왜 이게 효과 있었는가?
- 현대 C++에서는
std::format
사용을 가장 권장 - 구버전 C++에서는
ostringstream
또는fmt
라이브러리가 안전하고 편리함 sprintf
는 여전히 빠르지만 메모리 안전성 문제가 있을 수 있음
👉 프로젝트 환경(C++ 버전)에 따라 적절한 문자열 포맷팅 방법을 선택하는 것이 중요합니다!