C++中像sprintf一样格式化字符串:现代且安全的方法
你好!我最近开始写C++,遇到了字符串格式化的问题。以前在C语言中我使用sprintf:
char buffer[256];
sprintf(buffer, "Привет, %s! Тебе %d лет.", name.c_str(), age);
但在C++中配合std::string使用起来很不方便:需要带上c_str(),固定大小的缓冲区,而且sprintf不安全(可能缓冲区溢出)。我试过snprintf——好一些,但仍然很繁琐。
我知道有std::stringstream,但它太冗长了:
std::stringstream ss;
ss << "Привет, " << name << "! Тебе " << age << " лет.";
std::string result = ss.str();
对于简单情况这还行,但当需要格式化数字(字段宽度、精度、十六进制)时,写伪代码变得很痛苦。例如,如何输出保留两位小数的double或十六进制形式的int?
我听说过boost::format,但不想在小型项目中引入boost。C++20中好像有std::format,但我的编译器...