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?

Foi útil?

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();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top