Question

Visual Studio me crie sur l'utilisation de itoa() dire utiliser à la place _itoa()?

Il me semble que ce sont les mêmes fonctions. Ce qui donne?

Était-ce utile?

La solution

Une série C implémentation de la bibliothèque de temps n'est pas censé introduire des noms qui ne sont pas dans la norme, à moins qu'ils suivent une certaine convention de nommage (comme en commençant par un trait de soulignement). Les versions antérieures du compilateur Microsoft n'a pas suivi cette règle particulièrement près, mais au fil du temps, Microsoft a parcouru un chemin plus vers rendre leur application plus conforme aux normes. Ainsi, les fonctions qu'ils ont utilisé pour fournir ce empiéterait sur l'espace de noms de l'utilisateur qu'ils ont mis en œuvre en utilisant des noms qui sont réservés pour les implémentations du compilateur et ont été dévalorisant les anciens noms.

Si _CRT_NONSTDC_NO_WARNINGS est défini, le compilateur MS ne se plaindra pas de la fonction itoa() désapprouvée. Mais il se plaindra encore à ce sujet étant dangereux (vous devez définir _CRT_SECURE_NO_WARNINGS pour calmer cet avertissement). Ou utiliser la version plus sûre de la fonction (_itoa_s()) qui fournit la fonction de la taille de la mémoire tampon de destination

Les deux _itoa() et la détermination de itoa() à la même fonction exacte dans la bibliothèque vers le bas à la même adresse - il n'y a pas de différence, sauf dans le nom

.

Autres conseils

Le documentation MSDN pour itoa() dit:

  

Cette fonction POSIX est début dépréciée dans Visual C ++ 2005. Utilisez le ISO C ++ ou _itoa _itoa_s conforme de sécurité renforcée à la place.

itoa est pas standard C

« Cette fonction n'est pas définie dans la norme ANSI-C et ne fait pas partie de C ++, mais est pris en charge par certains compilateurs. » - cplusplus.com

MSVS vous dit d'utiliser le _itoa pour vous dire que ce n'est pas standard C ++ et que vous devez le marquer en tant que tel. Je crois qu'il est là pour la compatibilité ascendante et que cette notation est pour la lisibilité et la distinction.

itoa n'est pas standard, vous devez donc utiliser stringstream à la place.

vous aurez besoin #include <sstream>

un exemple de son utilisation serait:

int i = 5;
std::stringstream ss;

ss << i;

std:: cout << ss.str();

En réponse à la réponse de Bruce:

  

itoa n'est pas standard, vous devez donc utiliser stringstream à la place.

     

vous aurez besoin #include <sstream>

     

un exemple de son utilisation serait:

     

int i = 5;   std::stringstream ss;

     

ss << i;

     

std:: cout << ss.str();

Vous pouvez également votre propre fonction de la place itoa()

par exemple:

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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top