Qual é a diferença entre _itoa e Itoa?
-
22-09-2019 - |
Pergunta
Visual Studio está gritando comigo sobre usar itoa()
dizendo para usar _itoa()
em vez de?
Parece -me que eles são a mesma função. O que da?
Solução
A implementação da biblioteca de tempo de execução do CA não deve introduzir nomes que não estejam no padrão, a menos que sigam uma certa convenção de nomenclatura (como começar com um sublinhado). As versões anteriores do compilador da Microsoft não seguiram essa regra particularmente de perto, mas com o tempo, a Microsoft vem avançando mais para tornar sua implementação mais compatível com os padrões. Portanto, as funções que eles costumavam fornecer que se intrometiam no espaço para nome do usuário que eles implementaram usando nomes reservados para implementações do compilador e estão depreciando os nomes antigos.
Se _CRT_NONSTDC_NO_WARNINGS
é definido, o compilador MS não reclamará do itoa()
função sendo depreciada. Mas ainda vai reclamar de ser inseguro (você tem que definir _CRT_SECURE_NO_WARNINGS
para acalmar esse aviso). Ou use a versão mais segura da função (_itoa_s()
) que fornece a função com o tamanho do buffer de destino
Ambos _itoa()
e itoa()
Resolva exatamente a mesma função na biblioteca até o mesmo endereço - não há diferença, exceto no nome.
Outras dicas
o Documentação do MSDN para itoa()
diz:
Esta função POSIX está depreciada a partir do Visual C ++ 2005. Use o ISO C ++ em conformidade
_itoa
ou aprimorado de segurança_itoa_s
em vez de.
Itoa não é padrão C.
"Esta função não é definida no ANSI-C e não faz parte do C ++, mas é suportada por alguns compiladores". - cplusplus.com
Portanto, o MSVS está dizendo para você usar o _itoa para lhe dizer que não é C ++ padrão e que você deve marcá -lo como tal. Acredito que existe para compatibilidade com versões anteriores e que essa notação é para legibilidade e distinção.
itoa
Não é padrão, então você deve usar o StringStream.
você precisará #include <sstream>
Um exemplo de seu uso seria:
int i = 5;
std::stringstream ss;
ss << i;
std:: cout << ss.str();
Em resposta à resposta de Bruce:
itoa
Não é padrão, então você deve usar o StringStream.você precisará
#include <sstream>
Um exemplo de seu uso seria:
int i = 5;
std::stringstream ss;
ss << i;
std:: cout << ss.str();
Você também pode codificar o seu próprio itoa()
função em vez disso
por exemplo:
const char* itoa (int num)
{
if (num == 0)
{
return "0";
}
bool neg = false;
if (num < 0)
{
neg = true;
num = -num;
}
int digits = 0;
int tmp = num;
while (tmp > 0)
{
digits++;
tmp /= 10;
}
int digs[digits];
for (tmp = digits; num > 0; tmp--)
{
digs[tmp] = num % 10;
num /= 10;
}
string s = neg == true ? "-" : "";
for (tmp = 1; tmp <= digits; tmp++)
{
s += (char)(digs[tmp] + 48);
}
return s.c_str();
}