Formatação de strings em C++ como no sprintf: maneiras modernas e seguras
Olá! Estou escrevendo em C++ recentemente e me deparei com o problema de formatação de strings. Antes, em C, eu usava sprintf:
char buffer[256];
sprintf(buffer, "Olá, %s! Você tem %d anos.", name.c_str(), age);
Mas em C++ com std::string isso não funciona bem: é preciso usar c_str(), um buffer de tamanho fixo, e sprintf não é seguro (pode causar overflow no buffer). Tentei snprintf — é melhor, mas ainda é complicado.
Eu sei que existe std::stringstream, mas é muito verboso:
std::stringstream ss;
ss << "Olá, " << name << "! Você tem " << age << " anos.";
std::string result = ss.str();
Isso é ok para casos simples, mas quando é necessário formatar números (largura do campo, precisão, hex), escrever pseudo-código se torna doloroso. Por exemplo, como exibir um double com duas casas decimais ou um int em hexadecimal?
Ouvi falar sobre boost::format, mas não quero adicionar boost em um projeto pequeno. No C++20 parece que surgiu std::format, mas meu compilador No answers yet.
Faça login para deixar uma resposta
Blogs